无法根据UTC计算时间

时间:2013-11-11 21:23:32

标签: java datetime

我希望下面的代码能够在我当地的时区(美国东部时间)为我提供正确的时间,但我会比现在的时间提前5小时回来。我的userTimeZoneOffset值为-300,这是我的时区与UTC的正确偏移分钟数。 dateAndTimeFormat对我来说设为“MM / dd / yyyy h:mm a”。

如何让以下currentDateAndTime变量根据UTC而不是我当前的时区进行计算?

String dateAndTimeFormat = i18nUtil.getValue(locale, "dateAndTimeFormat");
SimpleDateFormat sdf = new SimpleDateFormat(dateAndTimeFormat);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
if (userTimeZoneOffset != null) {
    calendar.add(Calendar.MINUTE, userTimeZoneOffset);
}
String currentDateAndTime = sdf.format(calendar.getTime());
return currentDateAndTime;

1 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,你应该看一下Joda-Time而不是Java DateTime / Calendar库。

要以UTC格式获取当前时间,您应该导入以下包并调用以下代码行:

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;

DateTime utcDateTime = new DateTime(DateTimeZone.UTC);

您似乎也希望从收到的DateTime中减去时间。为此,您可以调用以下方法:

DateTime estDateTime = utcDateTime.minusHours(5);

Joda-Time:http://www.joda.org/joda-time/