我有一个移动应用程序,我在其中捕获日期/时间并将其作为毫秒发送到servlet。 - 例如我在手机上12:55捕获并将其发送到我的服务器 -
因此,我从发送的毫秒数构造日期并使用SimpleDateFormat打印它,但时间不同,它打印时间为早上8:55。 我知道问题是因为我使用了2个不同的时区,我的问题是: 如何显示时间而不应用任何时区来显示同一时间?
提前致谢
答案 0 :(得分:3)
您需要使用日历来更改TimeZone,但没有API。
// Change a date in another timezone
public static Date changeTimeZone(Date date, TimeZone zone) {
Calendar first = Calendar.getInstance(zone);
first.setTimeInMillis(date.getTime());
Calendar output = Calendar.getInstance();
output.set(Calendar.YEAR, first.get(Calendar.YEAR));
output.set(Calendar.MONTH, first.get(Calendar.MONTH));
output.set(Calendar.DAY_OF_MONTH, first.get(Calendar.DAY_OF_MONTH));
output.set(Calendar.HOUR_OF_DAY, first.get(Calendar.HOUR_OF_DAY));
output.set(Calendar.MINUTE, first.get(Calendar.MINUTE));
output.set(Calendar.SECOND, first.get(Calendar.SECOND));
output.set(Calendar.MILLISECOND, first.get(Calendar.MILLISECOND));
return output.getTime();
}
链接:http://blog.vinodsingh.com/2009/03/date-and-timezone-in-java.html
我认为这应该有效。我没有对它进行过广泛的测试。
答案 1 :(得分:2)
日历和日期对象以毫秒为单位存储与UTC相关的日期信息。
(当前时间与1970年1月1日午夜时间之间的差异,以毫秒为单位)
这意味着日历/日期对象不会为不同的时区存储不同的值。它们总是在内部使用相同的值...格式通常会发生变化。
也许您可以在本地/默认时区使用SimpleDateFormat:
SimpleDateFormat sdf = new SimpleDateFormat("S")
Date d = sdf.parse(milliseconds);
您还可以尝试更改DateFormat的时区,直到它与您的预期输出匹配。
sdf.setTimeZone(TimeZone.getTimeZone("GMT-8"));
System.out.println(sdf.toString());
sdf.setTimeZone(TimeZone.getTimeZone("GMT-4"));
System.out.println(sdf.toString());