如何在没有时区的情况下打印日期?

我有一个移动应用程序,我捕获日期/时间并以毫秒为单位发送给servlet。 – 例如我在手机上午12:55捕获并将其发送到我的服务器 –

因此,我从发送的毫秒数构造日期并使用SimpleDateFormat打印它,但时间不同,它打印时间为早上8:55。 我知道问题是因为我使用了2个不同的时区,我的问题是:如何在不应用任何时区显示同一时间的情况下显示时间?

提前致谢

您需要使用Calendar来更改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

我认为这应该有效。 我没有对它进行过广泛的测试。

Calendar和Date对象以毫秒为单位存储与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());