Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java';什么是约会工作?_Java_Date - Fatal编程技术网

Java';什么是约会工作?

Java';什么是约会工作?,java,date,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);

您好,我有以下代码:

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);
}
convertFromLocalToGMT应该去掉时区信息,ConvertFromGmtLocal应该把时区信息放回去。我知道java.util.Date表示历元中的时间,并且总是以GMT表示,但是当显示日期时,它默认为JVM的默认时区

我得到的解释是,如果您的时区是CST,并且是CST的上午10:00,那么您将使用convertFromLocalToGMT将时区更改为GMT,因此您实际上添加了偏移量以获得GMT,因此您将获得CST的上午4:00(偏移量为-6),并且使用convertFromGMTToLocal将将此日期对象转换回上午10:00,而不管您的时区如何(最让人困惑的部分是怎样的?)。上面的工作原理是什么?我很困惑

谢谢。

您几乎不应该在
日期上添加偏移量来创建另一个
日期
-只有在收到损坏的数据时才会这样做

您应该不要使用此代码。试图以非设计的方式处理
java.util.Date
的代码不好。如果您想表示特定时区中的日期,请使用
日历(urgh)或更好的API

特别是,您得到的代码不会在时区转换周围工作-因为
date.getTimeZoneOffset()
处的偏移仍然将
date
视为UTC(因为它的定义是UTC),即使您将其视为本地日期/时间

忽略由
Date.toString()
显示的值-避免使用该方法。可以使用
SimpleDataFormat
显示,并对您感兴趣的时区进行适当设置,或者(更好)使用Joda的
DateTimeFormat
类。

您几乎不应该在
日期
上添加偏移量来创建另一个
日期
——您只会在收到中断数据时才这样做

您应该不要使用此代码。试图以非设计的方式处理
java.util.Date
的代码不好。如果您想表示特定时区中的日期,请使用
日历(urgh)或更好的API

特别是,您得到的代码不会在时区转换周围工作-因为
date.getTimeZoneOffset()
处的偏移仍然将
date
视为UTC(因为它的定义是UTC),即使您将其视为本地日期/时间


忽略由
Date.toString()
显示的值-避免使用该方法。可以使用
SimpleDataFormat
显示,并对您感兴趣的时区进行适当设置,或者(更好)使用Joda的
DateTimeFormat
类。

正如您所说,Date对象不关心时区。它在时间上存储一个瞬间。只有当您想显示日期时,时区才有意义。使用
DateFormat
和您想用来显示日期的特定时区(使用)

正如您所说,日期对象不关心时区。它在时间上存储一个瞬间。只有当您想显示日期时,时区才有意义。使用
日期格式
和您想用来显示日期的特定时区(使用)

我们遇到的问题是我们想摆脱“时区”的概念从日期开始。因此,如果我们今天上午10:00,无论您在哪个时区,我们都应该显示上午10:00。为了实现上述转换,必须在GMT中处理它们,这将允许我们将此日期显示为上午10:00,而不管时区。@Mayumi:在这种情况下,您应该使用
LocalDateTime
LocalTime
来自Joda。如果您必须使用
日期
/
日历
,则只需对所有操作使用UTC,并记住您已经这样做了。但您不需要从本地时区转换来执行此操作,只需从UTC解析即可。(我假设您以某种方式收到了文本形式的值。如果您能更清楚地了解这一点,这将非常有帮助。)+1-OP的代码应该重新设计/重写,以使用更好的日期表示类。+1我真的认为Joda Time应该与下一个主要版本的java打包在一起“所有操作都使用UTC”日期不是已经在UTC中了吗?我最困惑的是java.util.Date的行为。当您(Date.getTime()-300(CST)*60*1000)时,行为是什么?日期确实带有默认为机器时间的时区偏移信息,例如,如果您保存(new Date())进入数据存储并在具有不同时区的机器中检索它,这种偏移量会更新吗?我们遇到的问题是我们想摆脱“时区”的概念从日期开始。因此,如果我们今天上午10:00,无论您在哪个时区,我们都应该显示上午10:00。为了实现上述转换,必须在GMT中处理它们,这将允许我们将此日期显示为上午10:00,而不管时区。@Mayumi:在这种情况下,您应该使用
LocalDateTime
LocalTime
来自Joda。如果您必须使用
日期
/
日历
,则只需对所有操作使用UTC,并记住您已经这样做了。但您不需要从本地时区转换来执行此操作,只需从UTC解析即可。(我假设您以某种方式收到了文本形式的值。如果您能更清楚地了解这一点,这将非常有帮助。)+1-OP的代码应该重新设计/重写,以使用更好的日期表示类。+1我真的认为Joda Time应该与下一个主要版本的java打包在一起“所有操作都使用UTC”Date不是已经在UTC中了吗?我最困惑的是java.util.Date的行为。当您(Date.getTime()-300(CST)*60*1000)时,它的行为是什么?Date确实带有默认为机器时间的时区偏移信息,例如,如果您保存(new)