使用Calendar和Date获取UTC时间

7
我正在尝试使用以下代码获取具有UTC时间的Date实例:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Date now = cal.getTime();

看起来很简单,但是如果我在IntelliJ的调试器中检查值,我会得到不同的日期:

cal: java.util.GregorianCalendar [time = 1405690214219,areFieldsSet = true,lenient = true,zone = GMT,firstDayOfWeek = 2,minimalDaysInFirstWeek = 4,ERA = 1,YEAR = 2014,MONTH = 6,WEEK_OF_YEAR = 29,WEEK_OF_MONTH = 3,DAY_OF_MONTH = 18,DAY_OF_YEAR = 199,DAY_OF_WEEK = 6,DAY_OF_WEEK_IN_MONTH = 3,AM_PM = 1,HOUR = 1,HOUR_OF_DAY = 13,MINUTE = 30,SECOND = 14,MILLISECOND = 219,ZONE_OFFSET = 0,DST_OFFSET = 0]

now: Fri Jul 18 10:30:14 BRT 2014

如您所见,calnow快3小时...我做错了什么?

提前致谢。

[编辑] 看起来在上面的代码之前添加TimeZone.setDefault(TimeZone.getTimeZone("UTC"));可以解决问题...


在提出重复问题之前,请先搜索StackOverflow。重复问题会降低网站的质量并浪费人们的时间。 - Basil Bourque
2个回答

5

这个问题已经在这里得到了解答。

System.out.println(cal_Two.getTime())调用返回一个从getTime()获取的Date。它是被转换为字符串以供println使用的Date,而该转换将在您的情况下使用默认的IST时区。

您需要显式地使用DateFormat.setTimeZone()来以所需的时区打印日期。

TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat simpleDateFormat = 
   new SimpleDateFormat("EE MMM dd HH:mm:ss zzz yyyy", Locale.US);
simpleDateFormat.setTimeZone(timeZone);

System.out.println("Time zone: " + timeZone.getID());
System.out.println("default time zone: " + TimeZone.getDefault().getID());
System.out.println();

System.out.println("UTC:     " + simpleDateFormat.format(calendar.getTime()));
System.out.println("Default: " + calendar.getTime());

编辑 以将日历转换为日期

      Calendar cal = Calendar.getInstance();
      int year = cal.get(Calendar.YEAR);
      int month = cal.get(Calendar.MONTH);
      int day = cal.get(Calendar.DATE);
      System.out.println(year);
      Date date = new Date(year - 1900, month, day);  // is same as date = new Date();

只需使用 Cal 值构建日期对象即可。如果有帮助,请告诉我。


好的,我看到了一些类似的答案。你的代码是有效的,但我想要一个日期的实例,而不是打印出来。如果我尝试像这样写Date now = simpleDateFormat.parse(calendar.getTime().toString());我会得到一个ParseException...查看http://stackoverflow.com/questions/23914287/parseexception-cant-figure-out-the-right-pattern - Lucas Jota

2

尝试使用日期格式化器并将时区设置为UTC。

dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); 

你能展示给我如何正确使用 dateFormatter.parse() 吗?我正在寻找一个 Date 实例,而不是一个字符串... - Lucas Jota

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接