【问题标题】:Getting UTC time with Calendar and Date [duplicate]使用日历和日期获取 UTC 时间 [重复]
【发布时间】:2014-07-18 13:49:07
【问题描述】:

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

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

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

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。重复会稀释网站的质量并浪费人们的时间。

标签: java android android-calendar


【解决方案1】:

这个问题已经回答here

System.out.println(cal_Two.getTime()) 调用从 getTime() 返回一个日期。将日期转换为 println 的字符串,在您的情况下,该转换将使用默认的 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());

编辑以将 cal 转换为日期

      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 对象。如果有帮助,请告诉我。

【讨论】:

  • 好的,我看到了一些这样的答案。您的代码有效,但我想要一个日期实例,而不是打印它。如果我尝试Date now = simpleDateFormat.parse(calendar.getTime().toString()); 之类的东西,我会得到一个 ParseException ......请参阅stackoverflow.com/questions/23914287/…
【解决方案2】:

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

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

【讨论】:

  • 你能告诉我使用dateFormatter.parse()的正确方法吗?我正在寻找一个 Date 实例,而不是一个 String...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 2020-06-02
  • 2013-08-17
  • 2016-11-09
相关资源
最近更新 更多