我正在尝试使用以下代码获取 UTC 时间的 Date 实例:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Date now = cal.getTime();
这看起来很简单,但是如果我检查 IntelliJ 调试器的值,我会得到不同的 cal
和 now
日期:
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]
现在
:2014 年 7 月 18 日星期五 10:30:14 BRT
如您所见,cal
比现在
早 3 小时...我做错了什么?
提前致谢。
[编辑] 看起来像 TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
在上面的代码完成工作之前...
这个问题已经有人回答了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 转换为 date
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 对象。如果有帮助,请告诉我。