2010-11-28 132 views
1

我有一个移动应用程序,它捕获一个日期/时间并以毫秒为单位发送给一个servlet。 - 例如,我在我的手机中捕获12:55 AM并将其发送到我的服务器 -如何在没有时区的情况下打印日期?

因此,我从发送的毫秒中构建日期并使用SimpleDateFormat打印它,但时间不同,它会打印8:55 AM 。 我知道问题是因为我使用了2个不同的时区,我的问题是: 如何显示那个时间而不应用任何时区来显示同一时间?

在此先感谢

回答

3

您需要使用日历更改时区,但没有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

我认为这应该工作。我没有广泛测试它。

2

日历和日期对象以毫秒为单位存储与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()); 
相关问题