java将UTC时间转换为本地时区
我必须将UTC时间转换为用户本地时区。目前,我有两个参数,一个是长格式的时间,另一个是字符串格式的时区名称,如“(UTC-05:00)东部时间(美国和加拿大),(UTC-06:00)中部时间(美国和加拿大)”等
所以现在使用这两个参数,我必须得到字符串格式的日期时间。我在尝试将日期转换为字符串时遇到了这个问题,因为SimpleDataFormat。格式(…)将使用默认时区转换日期
下面是代码部分
public static void main(String[] args)
{
long time = 1490112300000L;
System.out.println("UTC Time "+ convertLongToStringUTC(time));
String EST = "(UTC-05:00) Eastern Time (US and Canada)";
TimeZone timeZone1 = TimeZone.getTimeZone(EST);
System.out.println("EST "+ convertTimeZone(time, timeZone1));
String CST = "(UTC-06:00) Central Time (US and Canada)";
TimeZone timeZone2 = TimeZone.getTimeZone(CST);
System.out.println("CST "+ convertTimeZone(time, timeZone2));
String IST = "IST";
TimeZone timeZone = TimeZone.getTimeZone(IST);
System.out.println("IST "+ convertTimeZone(time, timeZone));
}
public String convertTimeZone(long time, TimeZone timeZone)
{
Date date = new Date(time);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setTimeZone(timeZone);
return format.format(date);
}
public String convertLongToStringUTC(long time)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String utcTime = sdf.format(new Date(time));
return utcTime;
}
还请让我知道我们是否可以使用偏移量来实现这一点
# 1 楼答案
tl;博士
细节
{a1}已关闭。我将提供进一步的资料
你的问题不是很清楚输入的内容。我假设您的长整数代表UTC中的一个时刻
{a2}是{a3}之前或之后的小时数、分钟数和秒数。在java中。时间,我们用^{} 来表示
虽然^{} 在技术上是可行的(正如丹尼斯在代码中看到的),但这是误导性的,因为分区远不止是一个偏移量。分区是一个区域在不同历史时期生效的各种偏移的历史。分区还包括任何计划的未来变更,如未来几个月的DST切换
提示:始终在小时数中添加空格零。虽然在各种协议(如ISO8601)中并不总是需要,但我看到软件系统在遇到像
+5:00
这样的单位小时数时会打嗝如果你确实知道预定的时区,就使用它。一个区域总比一个简单的偏移要好,因为它带来了过去、现在和未来其他偏移的所有历史信息
以} 、^{} 或
continent/region
的格式指定一个proper time zone name,例如^{Pacific/Auckland
。切勿使用3-4个字母的缩写,如EST
或IST
,因为它们不是真正的时区,不标准,甚至不是唯一的(!)我猜你的数字是自
1970-01-01T00:00:00Z
纪元以来的毫秒数{a10}类表示{a3}中时间轴上的一个时刻,分辨率为{a12}(小数点最多九(9)位)
你可以调整到一个时区
这些问题在堆栈溢出中已经讨论过多次。因此,你正在收集反对票(我猜)。请在发布前彻底搜索堆栈溢出
关于java。时间
java.time框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如^{} 、^{} 、&^{}
现在位于maintenance mode的Joda-Time项目建议迁移到java.time类
要了解更多信息,请参阅Oracle Tutorial。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310
在哪里可以获得java。时间课
ThreeTen-Extra项目扩展了java。额外上课的时间。这个项目是将来可能添加到java的一个试验场。时间您可以在这里找到一些有用的类,例如^{} 、^{} 、^{} 和more
# 2 楼答案
使用Java8您可以
# 3 楼答案
使用此构造函数
Java Doc