Java - 在没有TimeZone的情况下创建日历

时间:2012-07-10 15:38:15

标签: java datetime timezone

我首先要说的是,我已经阅读了几个与此类似的线程,但没有一个真正解决了我的问题。 我还想说明我尝试使用SimpleDateFormatjoda.DateTime但没有取得任何成功。

问题如下:

我有一个Calendar对象,其中包含有关特定日期的信息:2008-04-30T00:00:00Z 使用calendar.getTime()方法时,我可以得到不同的结果,因为我知道该方法正在寻找本地值

因此:

UK: 2008-04-30T01:00:00.000+0100

US: 2008-04-30T20:00:00.000-0400

但是我希望得到一个Date对象,它只包含日期和时间值“2008-04-30T00:00:00”,完全忽略任何时区。

我该怎么做?

正如我之前提到的,我试图使用 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")  但我总是得到相同的结果。

任何帮助都会非常感激 欢呼声。

5 个答案:

答案 0 :(得分:8)

发现您可以使用以下代码清除时区:

Calendar cal = Calendar.getInstance(); cal.clear(Calendar.ZONE_OFFSET);

答案 1 :(得分:4)

如果没有Calendars

DatesTimeZone就没有任何意义。

没有时区的日历不能

你不能ignore completely any timezone

您可以创建格林威治标准时间(偏移零)的日历,如下所示:

    TimeZone zone = TimeZone.getTimeZone("Etc/GMT");
    Calendar cal = Calendar.getInstance(zone);

这表示仅在GMT时区有意义的日期/日历。

听起来你想要一个时间戳,它代表了一个时刻。

答案 2 :(得分:1)

您是否使用标准构造函数初始化日历?如果您使用了允许指定时区和区域设置的构造函数,该怎么办?

protected Calendar(TimeZone zone, Locale aLocale)

答案 3 :(得分:1)

正如其他人指出的那样,没有时区就不能存在getBreadcrumbs()Calendar对象。

我相信您可能希望将Java 8中引入的LocalDateTime类与新的time API结合使用:

Date

答案 4 :(得分:0)

旧,但仍然不正确。

  

"当使用calendar.getTime()方法时,我可以得到不同的结果,因为我知道该方法正在寻找本地值"

这是一种误解。 getTime()只能获得毫秒数。作为GMT反击。

仅在格式化输出期间,时区变得相关。 Sind原来的海报没有显示代码,也无法确定,错误发生在哪里。