2012-07-10 67 views
1

我想先说我已经阅读了几个类似于这个的线程,但没有一个真正解决了我的问题。 我还想指出,我试图使用SimpleDateFormatjoda.DateTime没有任何成功。Java - 创建没有TimeZone的日历

的问题如下:

我有保存有关特定日期的信息的Calendar对象:2008-04-30T00:00:00Z 当使用calendar.getTime()方法我可以得到不同的结果,因为我知道这个方法是寻找本地值

这样:

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

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

但我想获得持有只是日期和时间值“2008-04-30T00 Date对象:00:00 “忽略c完全是任何时区。

我该怎么做?

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

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

+0

你能提供您已经尝试的例子? – kosa 2012-07-10 15:45:04

+0

我试过以下内容: SimpleDateFormat sf = new SimpleDateFormat(“yyyy-MM-dd'T'HH:mm:ss”); sf.setTimeZone(TimeZone.getTimeZone(“UTC”)); sd.parse(value); // value is'2008-04-30T00:00:00Z' – MaLLinok 2012-07-10 15:51:44

+2

你不能没有时区的日历。日历的概念取决于时区,否则就没有意义。 – jahroy 2012-07-10 17:23:34

回答

1

您是否使用标准构造函数来初始化Calendar?如果你使用允许指定时区和区域设置的构造函数呢?

protected Calendar(TimeZone zone, Locale aLocale) 
+0

我其实也是这么做的: CALENDAR.getInstance(TIME_ZONE_UTC,Locale.UK); 但返回的值与以下值相同:UK:2008-04-30T01:00:00.000 + 0100 – MaLLinok 2012-07-10 16:00:17

+0

每个Calendar实例始终都有一个与其关联的TimeZone。这就是他们的工作方式。 – jahroy 2012-07-10 18:32:17

4

CalendarsDates意味着什么没有TimeZone

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

您不能ignore completely any timezone

您可以创建格林威治标准时间日历(零偏移)这样的:

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

这代表了日期/日历,这只是在GMT时间有意义。

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

+0

这是垃圾回答,因为你可以清楚地使用没有时区的日期,然后使用带有清除时区信息的日历实际处理值。如果您的应用程序仅存在于一个时区中,则可以安全地忽略时区。问题是,当你得到'Date'值并且你忽略了那个日期的时区(你会得到很长的值),那么'Calendar'就会被你的时区关掉所有的操作。 – Enerccio 2018-02-26 07:17:23

0

旧的,但仍然不正确。

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

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

仅在格式化输出时区变得相关时。发现原始海报没有显示代码,无法确定,发生错误的地方。

5

发现,您可以通过使用下面的代码清除时区:

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

+0

这实际上对我有帮助 - 这对于我们无需关心时区的应用程序非常有用。除了时区之外 - 我们还可以清除很多其他信息,例如 - 小时,分钟,毫秒 - 所有这些字段都可以在这里找到 https://docs.oracle.com/javase/7/docs/api/java /util/Calendar.html – 2016-09-20 14:15:57