我想首先说,我读过几个类似于这个的线程,但没有一个真正解决我的问题。我还想声明,我尝试过使用SimpleDateFormat
和joda.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);
Calendars
和Dates
没有TimeZone
就没有意义。
没有时区,日历和日期就不能存在。
你不能ignore completely any timezone
。
您可以创建一个格林威治标准时间日历(零偏移),如下所示:
TimeZone zone = TimeZone.getTimeZone("Etc/GMT");
Calendar cal = Calendar.getInstance(zone);
这表示只有在GMT时区才有意义的日期/日历。
听起来你想要一个时间戳,它代表一个瞬间。
正如其他人所指出的,Calendar
和Date
对象不可能在没有时区的情况下存在。
我相信您可能希望将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的原始海报没有显示代码,因此无法确定错误发生在哪里。