Java Can';我没有时间根据UTC进行计算

Java Can';我没有时间根据UTC进行计算,java,datetime,Java,Datetime,我希望下面的代码能够在我的本地时区(美国东部时间)为我提供正确的时间,但我总是比我的当前时间早5个小时返回时间。我的userTimeZoneOffset值为-300,这是我所在时区与UTC的正确偏移分钟数日期和时间格式为我设置为“MM/dd/yyyy h:MM a” 如何获取下面的currentDateAndTime变量,以根据UTC而不是我的当前时区进行计算 String dateAndTimeFormat = i18nUtil.getValue(locale, "dateAndTimeFor

我希望下面的代码能够在我的本地时区(美国东部时间)为我提供正确的时间,但我总是比我的当前时间早5个小时返回时间。我的
userTimeZoneOffset
值为-300,这是我所在时区与UTC的正确偏移分钟数<代码>日期和时间格式为我设置为“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;

正如我在评论中提到的,您应该查看Joda Time,而不是Java DateTime/日历库

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

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

DateTime utcDateTime = new DateTime(DateTimeZone.UTC);
看起来你也希望从收到的日期时间中减去时间。为此,您将调用以下方法:

DateTime estDateTime = utcDateTime.minusHours(5);

Joda Time:

插入强制性的“使用Jodatime”注释您正在创建一个日历,其时间是当前时间,然后从中删除300分钟,然后惊讶地发现它不再是当前时间?如果需要当前时间,
Calendar.getInstance()
就足够了。如果您希望在时区中格式化当前时间,则
新的SimpleDataFormat(模式)。格式化(新日期())
就足够了。我已经知道并理解
新日期()
将为我提供当前时区中的时间。我想获取UTC时间,并应用传递给它的任何偏移量,然后返回该时间。@jbniset-还有,
Calendar.getInstance(TimeZone.getTimeZone(“UTC”)
为什么要给我当前时间?有人会认为这会给我UTC时间。你所知道的是错误的。约会没有任何时区。这是时间线上的一个普遍瞬间
Calendar.getInstance()
返回当前时间。通过向其传递时区,它将创建一个包含当前时间的日历,以便在UTC时区中进行操作。因此,如果您询问毫秒数,无论时区是什么,它都会返回相同的值。如果您询问它一周中的哪一天,那么它将返回UTC时区中当前时间的一周中的哪一天。在美国和澳大利亚,给定的时间(当前时间)没有一周中的同一天。是的,这看起来是可行的…托管我的java代码的服务器所在的时区与我的客户端所在的时区不同,因此我需要根据UTC和每个用户的时区偏移量进行计算-谢谢。很抱歉没有尽快回答。我想这是一种能很快得到回答的问题。使用Joda需要注意的一点是,它是Java日历和日期的不可变替代品。这很好,但这绝对是一个我想让你知道的问题。