我希望下面的代码能够在我当地的时区(美国东部时间)为我提供正确的时间,但我会比现在的时间提前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;
答案 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/