我有一个数据库OleDateTime,以GMT时区格式存储日期.我已经实现了一个类,Date在java中扩展以表示经典日期格式.但我的班级依赖于语言环境(我在GMT + 2).因此,它将db中的日期转换为date - 2 hours.如何正确转换日期?我希望我的班级与语言环境无关,总是使用GMT时区.实际上,问题是:
class MyOleDateTime extends Date {
static {
Locale.setDefault(WhatGoesHere?)
}
// ... some constructors
// ... some methods
}
Run Code Online (Sandbox Code Playgroud)
嗯,最好像其他答案中建议的那样使用Calendar对象.但是,如果您确实要设置全局时区,则可以TimeZone.setDefault(TimeZone.getTimeZone("UTC"));在应用程序代码中尽早使用.还有user.timezoneJava系统属性.
另外(很有趣),看来实际生活在GMT/UTC时间(没有夏令时变化)的唯一国家是利比里亚.
事实上,Date对象本身总是与语言环境和时区无关.它的getTime()方法将始终返回自UTC的 1970年1月1日00:00:00(不计算闰秒)以来经过的毫秒数.但是如果你想得到毫秒以外的东西,你必须使用Calendar,这是时区依赖的.但这是正确的方法.你不在Date课堂上使用那些弃用的方法,对吗?
正如Michael Borgwardt所说,Java Date对象对时区一无所知.它只是自01-01-1970 00:00:00 UTC以来的一个毫秒的包装器.
只有当您将Date对象转换为String使用a 时,才开始处理时区DateFormat.您DateFormat可以在其上设置时区以指定要在哪个时区中查看Date.
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss Z");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
String text = df.format(date); // text will contain date represented in UTC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19396 次 |
| 最近记录: |