Java 如何处理国际时间?
我建立了一个新网站。但是主持人在美国。我不在美国。 我需要在网站页面上获得与一个局部变量进行比较的时间。 但是由于时差的原因,它有8个小时的时间差。如何解决这个问题 我的代码Java 如何处理国际时间?,java,jsp,timezone,Java,Jsp,Timezone,我建立了一个新网站。但是主持人在美国。我不在美国。 我需要在网站页面上获得与一个局部变量进行比较的时间。 但是由于时差的原因,它有8个小时的时间差。如何解决这个问题 我的代码 SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); java.util.Date currentTime = new java.util.Date(); String dateString = formatter.format(current
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
java.util.Date currentTime = new java.util.Date();
String dateString = formatter.format(currentTime); `
如何修改这些代码?
java.util.Date
不支持时区。您应该通过调用formatter.setTimeZone(tz)
将时区传递给格式化程序
在处理日期时,被认为是更好的选择。请注意,为了格式化,可以使用Date
,但对于i18n,一般建议不要依赖它。(注意这里有许多不推荐使用的方法)
然后让每个用户设置自己的时区。理想情况下,建议/假设基于浏览器区域设置的时区
并始终将日期存储在固定时区中-最好是GMT/UTC。在这种情况下,我始终:
例如,它也有助于读取日志文件(每次需要深入查看日志文件时,我总是查看本地时间,而不是计算本地时间)我认为您需要使用日历(它们通常比日期对象更有用)。如果您创建了一个用您的区域设置和时区初始化的日历,您可以使用您创建的日期执行Calendar.setDate()
。如果使用输入的字段创建另一个日历对象,则可以在这两个日历对象之间进行比较。为了处理时区,Java包括。在数据库中查找与您所在时区相同的城市
首先,你需要得到一个你想要的时区。然后,获取包含当前日期和时间(或您希望使用的日期和时间)的。您可以使用SimpleDateFormat对象对其进行格式化
TimeZone local = TimeZone.getTimeZone("Asia/Tokyo");
Calendar now = Calendar.getInstance(local); // gets time in the current timezone
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
formatter.setTimeZone(local)
String dateString = formatter.format(now.getTime());
不过,如果你像波佐说的那样大量操纵时间,那就选择乔达时间。Java日期/时间系统令人困惑,而且设计得相当糟糕。相关:+1表示以GMT存储时间,而-1表示不使用date
。使用日期
没有什么错,它只是定义了一个时间点。您所需要做的就是告诉格式化程序您希望在哪个时区格式化日期。@SimonC-使用日期是不合适的,因为它使用JVM的默认时间节点。虽然这对于格式化(通过使用外部格式化程序)来说确实很好,但一般建议不要使用它。@Bozho你为什么说它不好?只要将Date
对象视为自历元以来的一个时间点,并在处理日历或格式时使用正确的时区,就不会出错。也就是说,不要调用toString()
或任何不推荐使用的方法,如getHours()
@SimonC-好吧,有许多先决条件是安全的。这就是为什么它很棘手。整个类还没有被弃用,所以我同意它有它的用例,但可能很棘手。另外,它是可变的。所有这些都导致了诸如Calendar、DateTime
和即将推出的标准DateTime api之类的替换。我把“TimeZone local=TimeZone.getTimeZone(“亚洲/东京”);Calendar now=Calendar.getInstance(本地);SimpleDateFormat formatter=new SimpleDateFormat(“HH:mm:ss”);String dateString=formatter.format(now.getTime());你说“创建一个日历,用你的区域设置和时区初始化”,你能给我一个代码示例吗?当然,如果你看文档:,java.util.locale),你可以用你自己的时区/区域设置构建一个日历。对不起,我应该说,你可以得到一个实例,例如:`Calendar myCal=Calendar.getInstance(timezone.getTimeZone(“Europe/London”))59426;“thx~现在一切都好了。:P
TimeZone local = TimeZone.getTimeZone("Asia/Tokyo");
Calendar now = Calendar.getInstance(local); // gets time in the current timezone
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
formatter.setTimeZone(local)
String dateString = formatter.format(now.getTime());