【发布时间】:2014-07-18 12:05:34
【问题描述】:
我在 java 应用程序和一个 android 应用程序中使用相同的方法生成日期和时间,但我惊讶地发现由相同函数产生的输出不同,我很好奇为什么当我们使用两种方法时会发生这种情况不同的平台,谁能解释一下。
这是输出
Java application output ---Fri Jul 18 12:51:17 IST 2014
Android application output----Thu Jul 17 18:46:05 GMT+05:30 2014
这是返回日期的代码[用于相同应用程序的相同代码]
private Date offsetTimeZone(Date date, String fromTZ, String toTZ) {
// Construct FROM and TO TimeZone instances
TimeZone fromTimeZone = TimeZone.getTimeZone(fromTZ);
TimeZone toTimeZone = TimeZone.getTimeZone(toTZ);
System.out.println("timezone:" + fromTimeZone);
// Get a Calendar instance using the default time zone and locale.
Calendar calendar = Calendar.getInstance();
// Set the calendar's time with the given date
calendar.setTimeZone(fromTimeZone);
calendar.setTime(date);
System.out.println("Input: " + calendar.getTime() + " in "
+ fromTimeZone.getDisplayName());
// UTC to TO TimeZone
calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}
return calendar.getTime();
}
从安卓应用调用方法
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
Locale.ENGLISH).parse(_data.get(position).get_date());
date2 = offsetTimeZone(date, "UTC", timezoneID);
从java应用程序调用方法
try {
String timezoneID = TimeZone.getDefault().getID();
System.out.println("idd:" + timezoneID);
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
Locale.ENGLISH).parse("2014-07-18 07:21:17");
Date date2 = offsetTimeZone(date, "UTC", timezoneID);
System.out.println("output" + date2.toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
【问题讨论】:
-
看起来像是不同的时区。每种情况下 timezoneID 的值是多少?
-
均返回亚洲/加尔各答时区
-
您是否尝试过在 android 代码中将 _data.get(position).get_date() 替换为“2014-07-18 07:21:17”?即 get_date() 是否返回“2014-07-18 07:21:17”?
-
是的,我试过了,但答案还是一样
标签: java android datetime time