在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
在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));
但s
为2011-6-30 05:48:34
。如何在Java中实现ToLocalTime()函数?
答案 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();
}