Java Date在任何时区看起来都相同

时间:2015-01-08 15:02:37

标签: java date datetime

我目前正在尝试创建一个java Date,无论我在哪个时区查看它都看起来都一样。我目前的代码是:

    Calendar cal = Calendar.getInstance();
    cal.set(2015, Calendar.JANUARY, 8, 0, 0, 0);
    cal.set(Calendar.MILLISECOND, 0);
    Date date = cal.getTime();

在我目前的时间区域,这给了我'2015-01-08T00:00:00Z'在另一个这给了我2015-01-08T00:00:00-03:00。我想知道的是,如果有任何方法可以删除时区部分,以便两个时区的时间相同。

我非常感谢你对此事的任何帮助。谢谢。

2 个答案:

答案 0 :(得分:2)

Java SE 8附带了一个新的Date&时间API。请查看LocalDateLocalDateTime

答案 1 :(得分:0)

如果您只对时间格式感兴趣,请创建一个java.text.SimpleDateFormat对象,以您希望的格式打印您的时间。 http://docs.oracle.com/javase/1.5.0/docs/api/java/text/SimpleDateFormat.html

如果您想要时间打印相同的数字,无论TimeZone, 使用String ids [] = java.util.TimeZone.getAvailableIDs(); 获取TimeZone的ID并找到您想要的ID。

在这个例子中,我创建了两个设置为两个不同TimeZones的SimpleDateFormat对象。它们都打印出相同的Calendar对象。我已经在ft2中取下了Z来移除时区部分。依靠toString(),我认为你在显示日期时会受到Locale差异的影响,比如US MM / dd / yyyy和UK dd / MM / yyyy。

        TimeZone tz = TimeZone.getTimeZone("America/New_York");
        TimeZone tz2 = TimeZone.getTimeZone("America/Chicago");
        Calendar acal = new GregorianCalendar();
        SimpleDateFormat ft =  new SimpleDateFormat ("yyyy-MM-dd'T'hh:mm:ss  Z");
        ft.setTimeZone(tz);
        SimpleDateFormat ft2 =  new SimpleDateFormat ("yyyy-MM-dd'T'hh:mm:ss");
        ft2.setTimeZone(tz2);
        String date1 = ft.format(acal.getTime());

        System.out.println(date1);
        String date2 = ft2.format(acal.getTime());
        System.out.println(date2);

输出:

2015-01-08T10:36:39 -0500

2015-01-08T09:36:39