Java - 创建一个不带时区的日历

6
我想先说,我已经阅读了几篇类似的帖子,但是它们都没有真正解决我的问题。我还想声明,我尝试使用SimpleDateFormat和joda.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") 但结果总是相同。

非常感谢任何帮助。 干杯。


你能提供你尝试过的例子吗? - kosa
我已尝试了如下代码: SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); sf.setTimeZone(TimeZone.getTimeZone("UTC")); sd.parse(value); //value的值为 '2008-04-30T00:00:00Z' - MaLLinok
2
没有时区,就没有日历。日历的概念完全依赖于时区,否则它就毫无意义。 - jahroy
5个回答

12

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

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


这确实对我有帮助 - 这在不需要关心时区的应用程序中非常有用。除了时区之外,我们还可以清除许多其他东西,比如小时,分钟,毫秒 - 所有这些领域都可以在此找到 https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html - Ashish Shetkar

4

日历日期如果没有时区是没有任何意义的。

如果没有时区,日历和日期无法存在

你不能完全忽略任何时区

你可以像这样为格林威治标准时间(偏移量为零)创建一个日历:

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

这代表的是仅在格林威治标准时间有意义的日期/日历。

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


1
这是一条糟糕的回答,因为你可以明确地使用没有时区信息的日期,然后使用清除时区信息的日历来实际处理值。如果您的应用程序仅存在于一个时区,则可以安全地忽略时区。问题在于,当您获得一个“日期”值并且您忽略该日期的时区(您获取长整型值),“日历”将与所有操作相比,针对您的时区偏移。 - Enerccio

2
其他人已经指出,CalendarDate对象没有时区是不存在的。
我认为您可能想使用Java 8中引入的新时间API中的LocalDateTime类:
LocalDateTime literal = LocalDateTime.of(2008, 4, 30, 0, 0, 0);
LocalDateTime parsed = LocalDateTime.parse("2008-04-30T00:00:00"); // ISO-8601 by default
Assert.assertEquals(literal, parsed);

1
你在初始化日历时使用标准构造函数吗?如果使用允许指定时区和语言环境的构造函数会怎样呢?
protected Calendar(TimeZone zone, Locale aLocale)

我也试过这种方式:CALENDAR.getInstance(TIME_ZONE_UTC, Locale.UK);但是它返回的值与以下结果相同:UK: 2008-04-30T01:00:00.000+0100 - MaLLinok
每个日历实例始终都会与一个时区相关联。这就是它们的工作原理。 - jahroy

0

虽然旧,但仍然不正确。

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

这是一个误解。getTime()只会获取毫秒数,计算为GMT时间。

仅在输出格式化期间,时区才变得相关。由于原始帖子没有显示代码,因此无法确定错误发生的位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接