如何在没有时区的情况下打印日期?
问题描述:
我有一个移动应用程序,它捕获一个日期/时间并以毫秒为单位发送给一个servlet。 - 例如,我在我的手机中捕获12:55 AM并将其发送到我的服务器 -如何在没有时区的情况下打印日期?
因此,我从发送的毫秒中构建日期并使用SimpleDateFormat打印它,但时间不同,它会打印8:55 AM 。 我知道问题是因为我使用了2个不同的时区,我的问题是: 如何显示那个时间而不应用任何时区来显示同一时间?
在此先感谢
答
您需要使用日历更改时区,但没有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
我认为这应该工作。我没有广泛测试它。
答
日历和日期对象以毫秒为单位存储与UTC有关的日期信息。
(差值,以毫秒为单位,当前时间和午夜,1970年1月1日之间UTC)
这意味着,日历/日期的对象不存储不同的时区不同的值。它们在内部始终使用相同的值...格式通常会发生变化。
也许你可以在你的本地/默认时区使用的SimpleDateFormat:
SimpleDateFormat sdf = new SimpleDateFormat("S")
Date d = sdf.parse(milliseconds);
您也可以尝试更改日期格式的时区,直到您的预期输出匹配。
sdf.setTimeZone(TimeZone.getTimeZone("GMT-8"));
System.out.println(sdf.toString());
sdf.setTimeZone(TimeZone.getTimeZone("GMT-4"));
System.out.println(sdf.toString());