嗨,我有以下代码:
public Date convertFromGMTToLocal(Date date) {
return new Date(date.getTimezoneOffset() + newOffset*60*1000);
}
public Date convertFromLocalToGMT(Date date) {
return new Date(date.getTime() - date.getTimezoneOffset()*60*1000);
}
Run Code Online (Sandbox Code Playgroud)
convertFromLocalToGMT应该剥离时区信息,convertFromGMTToLocal应该返回时区信息.我知道java.util.Date表示epoch中的时间并且总是在GMT中,但是当显示日期时,它默认为JVM的默认时区.
我得到的解释是,如果您的时区是CST并且是CST上午10:00您正在使用convertFromLocalToGMT将时区更改为GMT,那么您实际上是要添加偏移量以获得GMT,以便获得4:00 AM CST(偏移量为-6)并且使用convertFromGMTToLocal会将此Date对象转换回上午10:00,而不管您的时区(最令人困惑的部分如何?).上面的工作如何?我很迷惑...
谢谢.
你几乎不应该为a添加一个偏移量来Date创建另一个Date- 如果你收到破碎的数据,你只会这样做.
您应该不使用此代码.这是一个糟糕的代码,试图以java.util.Date一种它不是为其设计的方式来对待.如果你想表示在特定时间段的日期,或者使用Calendar(urgh)或远越好约达时间的API.
特别是,你已经得到了代码将不解决时区转换-因为在偏移量date.getTimeZoneOffset()仍然认为date是UTC(因为这是它的定义),即使你治疗它作为一个本地的日期/时间.
忽略显示的值Date.toString()- 避免使用该方法.无论是使用显示SimpleDateFormat与您感兴趣的时区适当的设置,或(更好,再次)使用Joda的DateTimeFormat类.
| 归档时间: |
|
| 查看次数: |
1731 次 |
| 最近记录: |