3
我有,其中转换的DateTime
到特定DateTimeZone
一个小工具的方法,设置在该时区的时间,并再次转换到另一个时区:转换日期时间到时区,设置时间和转换回
/**
* Delivers a DateTime with changed time in the specified DateTimeZone.
*
* @param dateTime the date time to convert
* @param hour the hour to set in the client timezone date time
* @param minute the minute to set in the client timezone date time
* @param second the second to set in the client timezone date time
* @param dtzConversion the client time zone
* @param dtzReturn the time zone of the return date time (optionally: can be null)
* @return the date time
*/
public DateTime convertDateTimeToTimeZone(final DateTime dateTime, final int hour, final int minute, final int second,
final DateTimeZone dtzConversion, final DateTimeZone dtzReturn)
{
// convert to given timezone
DateTime dtClientTimezone = dateTime.withZoneRetainFields(dtzConversion);
// adjust time
dtClientTimezone = dtClientTimezone.withTime(hour, minute, second, 0);
if (dtzReturn != null) {
// convert to target timezone
dtClientTimezone = dtClientTimezone.withZoneRetainFields(dtzReturn);
}
return dtClientTimezone;
}
在我的例子dateTime
是德国日期30.9.2015 22:00:00 UTC
和dtzConversion
是Europe/Berlin
和dtzReturn
是UTC
随着时间的推移设置12:00:00
结果是30.09.2015 12:00:00。但我期望01.10.2015 10:00:00因为30.09.2015 22:00:00 UTC
到Europe/Berlin
应该是01.10.2015 00:00:00
。时间设置为'12:00:00',其结果为01.10.2015 12:00:00
。这在UTC
是01.10.2015 10:00:00
。我的错在哪里?
似乎是正确的。但为什么第一次时区转换的时间毫秒是相同的? 'DateTime dtClientTimezone = dateTime.withZone(dtzConversion);'with'dateTime' millis为1443650400000(30.09.2015 22:00:00),'dtzConversion'为'Europe/Berlin',现在'dtClientTimezone' millis也为1443650400000。 ?毫米应该是2个小时。不是吗? – opfau
也许'datetime'的时区设置为德国时区,则不会进行调整。用一个例子更新代码。 – flo
你的意思是像当地时区吗?在我的情况下,它发生在服务器上,所以我只想将这些millis转换为特定的时区。我对乔达时间有点困惑。 – opfau