将UTC时间转换为Java和c#中的本地时间
本文关键字:时间 Java UTC 转换 | 更新日期: 2023-09-27 18:05:11
In c#:
DateTime dateTime = DateTime.Parse(text, CultureInfo.InvariantCulture);
string s = dateTime.ToLocalTime().ToString("s", CultureInfo.InvariantCulture));
text
为2011-06-30T05:48:34Z
, s
为2011-6-30 13:48:34
DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
// explicitly set timezone of input if needed
df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
java.util.Date dateTime ;
dateTime = df.parse(text);
String s= df.format(dateTime));
,但s
是2011-6-30 05:48:34
。如何在Java中实现ToLocalTime()函数?
您的代码df.parse(text)使用时区从字符串中解析日期。然后在同一时区设置日期格式。因此,你得到了相同的结果,显然它必须这样工作。不幸的是simpleDateFormat与ISO8601不兼容。您可以使用joda time库,它更强大且设计良好。或者,如果您始终确保您的输入字符串始终是GMT格式并以Z结尾,那么您可以使用显式代码:
DateFormat dfParse = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
dfParse.setTimeZone(TimeZone.getTimeZone("UTC"));
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
java.util.Date dateTime ;
dateTime = dfParse.parse(text);
String s= df.format(dateTime);
首先将日期设置为UTC并将其放入对象
java.util.Date dateTime ;
df.setTimeZone(TimeZone.getTimeZone("UTC"));
datetime = df.parse(text);
//Now set this to the required local timezone
df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
String s= df.format(dateTime));
现在字符串应该有合适的日期
try{
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
Date datetime = new Date();
System.out.println("date "+sdf.format(datetime));
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
System.out.println("asia/shanghai "+ sdf.format(datetime));
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("utc "+sdf.format(datetime));
}catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}