Java-创建一个没有时区的日历



我想首先说,我读过几个类似于这个的线程,但没有一个真正解决我的问题。我还想声明,我尝试过使用SimpleDateFormatjoda.DateTime,但没有成功。

问题如下:

我有一个日历对象,它保存有关特定日期的信息:2008-04-30 T00: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")但我最终总是得到同样的结果。

任何帮助都将不胜感激干杯

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

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

CalendarsDates没有TimeZone就没有意义。

没有时区,日历和日期就不能存在

你不能ignore completely any timezone

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

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

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

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

正如其他人所指出的,CalendarDate对象不可能在没有时区的情况下存在。

我相信您可能希望将Java 8中引入的LocalDateTime类与新的时间API:一起使用

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

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

protected Calendar(TimeZone zone, Locale aLocale)

旧的,但仍然不正确。

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

这是一种误解。getTime()将只获取毫秒数。计数为GMT.

只有在格式化输出时,时区才具有相关性。Sind的原始海报没有显示代码,因此无法确定错误发生在哪里。

相关内容

  • 没有找到相关文章

最新更新