将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));

text2011-06-30T05:48:34Z, s2011-6-30 13:48:34

java:

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));

,但s2011-6-30 05:48:34。如何在Java中实现ToLocalTime()函数?

将UTC时间转换为Java和c#中的本地时间

您的代码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();
    }