我尝试使用以下代码获取UTC时间的日期实例:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Date now = cal.getTime();
看起来很简单,但是如果我检查IntelliJ调试器的值,我会得到cal
和now
的不同日期:
cal
:java.util.GregorianCalendar中[时间= 1405690214219,areFieldsSet =真,宽大=真,区= 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,微差= 219,ZONE_OFFSET = 0,DST_OFFSET = 0]
now
:7月18日星期五10:30:14 BRT 2014
如您所见,cal
比now
提前3小时......我做错了什么?
提前致谢。
[编辑]在上面的代码完成工作之前看起来像TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
...
答案 0 :(得分:3)
此问题已经回答here
System.out.println(cal_Two.getTime())调用从getTime()返回Date。它是转换为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对象。如果有帮助,请告诉我。
答案 1 :(得分:1)
尝试使用日期格式化程序并将时区设置为UTC。
dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));