我首先要说的是,我已经阅读了几个与此类似的线程,但没有一个真正解决了我的问题。
我还想说明我尝试使用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")
但我总是得到相同的结果。
任何帮助都会非常感激 欢呼声。
答案 0 :(得分:8)
发现您可以使用以下代码清除时区:
Calendar cal = Calendar.getInstance();
cal.clear(Calendar.ZONE_OFFSET);
答案 1 :(得分:4)
Calendars
, Dates
和TimeZone
就没有任何意义。
没有时区的日历不能。
你不能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原来的海报没有显示代码,也无法确定,错误发生在哪里。