在Java和c#中转换UTC时间T0本地时间

时间:2011-08-09 09:24:41

标签: c# java

在c#中:

DateTime dateTime = DateTime.Parse(text, CultureInfo.InvariantCulture);
string s = dateTime.ToLocalTime().ToString("s", CultureInfo.InvariantCulture));

text2011-06-30T05:48:34Zs2011-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()函数?

3 个答案:

答案 0 :(得分:1)

首先将日期设置为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));

现在字符串应该有正确的日期

答案 1 :(得分:1)

您的代码df.parse(text)使用时区从字符串中解析日期。然后在同一时区格式化日期。因此,你得到了相同的结果,显然它必须如此。 Unfortunately simpleDateFormat is not compatible with ISO8601。你可以使用joda时间库,它更强大,设计精良。或者,如果您始终确定输入字符串始终为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);

答案 2 :(得分:-1)

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