Java的日期如何工作?

dat*_*ser 1 java date

嗨,我有以下代码:

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,而不管您的时区(最令人困惑的部分如何?).上面的工作如何?我很迷惑...

谢谢.

Jon*_*eet 7

你几乎应该为a添加一个偏移量来Date创建另一个Date- 如果你收到破碎的数据,你会这样做.

您应该使用此代码.这是一个糟糕的代码,试图以java.util.Date一种它不是为其设计的方式来对待.如果你想表示在特定时间段的日期,或者使用Calendar(urgh)或越好约达时间的API.

特别是,你已经得到了代码将解决时区转换-因为在偏移量date.getTimeZoneOffset()仍然认为date是UTC(因为这是它的定义),即使你治疗它作为一个本地的日期/时间.

忽略显示的值Date.toString()- 避免使用该方法.无论是使用显示SimpleDateFormat与您感兴趣的时区适当的设置,或(更好,再次)使用Joda的DateTimeFormat类.