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

时间:2010-11-28 03:17:44

标签: java datetime

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

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

提前致谢

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());