在 Java 中获取 UTC 格式的日期对象

2022-09-01 00:19:33

我写了以下代码。我想获取 UTC 格式的日期对象。

我能够使用 UTC 格式获取预期的日期字符串。但是使用相同的对象,我无法以UTC格式获取对象。它以 IST 格式返回对象。SimpleDateFormatSimpleDateFormat

搜索后,我发现日期对象不存储时间戳信息。

如何获取 UTC 格式的日期对象?

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class dddd {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("Input - "+1393572325000L);
        DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date date= new Date(1393572325000L);  
        String dateString = formatter.format(date);

        System.out.println("Converted UTC TIME (using Format method) : "+dateString);

        Date date2 =null;
        try {
            date2 = formatter.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }


        System.out.println("Parsed Date Object (using Parse method) : "+date2);

        System.out.println("Expected Date Object : Fri Feb 28 07:25:25 UTC 2014");

    }

}

这将打印以下输出:

Input - 1393572325000
Converted UTC TIME (using Format method) : 2014-02-28 07:25:25
Parsed Date Object (using Parse method) : Fri Feb 28 12:55:25 IST 2014
Expected Date Object : Fri Feb 28 07:25:25 UTC 2014

答案 1
final Date currentTime = new Date();
final SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM d, yyyy hh:mm:ss a z");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("UTC time: " + sdf.format(currentTime));

答案 2

日期没有任何时区。您看到的只是该方法的日期格式设置,该方法始终使用您的本地时区,将与时区无关的日期转换为您可以理解的字符串。Date.toString()

如果要使用 UTC 时区将与时区无关的日期显示为字符串,请使用带有 UTC 时区的 SimpleDateFormat(正如您在问题中已经执行的操作一样)。

换句话说,时区不是日期的属性。它是用于将日期转换为字符串的格式的属性。


推荐