通过日历和日期获取UTC时间

时间:2014-07-18 13:49:07

标签: java android android-calendar

我尝试使用以下代码获取UTC时间的日期实例:

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

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

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

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

提前致谢。

[编辑]在上面的代码完成工作之前看起来像TimeZone.setDefault(TimeZone.getTimeZone("UTC")); ...

2 个答案:

答案 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"));