在这里这样做,但仍然没有翻译成所需的:
String dtc = "2014-04-02T07:59:02.111Z";
SimpleDateFormat readDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Date date = null;
try {
date = readDate.parse(dtc);
Log.d("myLog", "date "+date);
} catch (ParseException e) {
Log.d("myLog", "dateExcep " + e);
}
SimpleDateFormat writeDate = new SimpleDateFormat("dd.MM.yyyy, HH.mm");
writeDate.setTimeZone(TimeZone.getTimeZone("GMT+04:00"));
String s = writeDate.format(date);
在变量" s"的输出处仍然给出时间07:59:02,我想提前+4小时,即11:59:02
答案 0 :(得分:22)
您需要指示读取格式化程序将输入解释为UTC(GMT - 记住Z代表ISO-8601格式的UTC):
String dtc = "2014-04-02T07:59:02.111Z";
SimpleDateFormat readDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
readDate.setTimeZone(TimeZone.getTimeZone("GMT")); // missing line
Date date = readDate.parse(dtc);
SimpleDateFormat writeDate = new SimpleDateFormat("dd.MM.yyyy, HH.mm");
writeDate.setTimeZone(TimeZone.getTimeZone("GMT+04:00"));
String s = writeDate.format(date);
然后你会得到:
02.04.2014,11.59
答案 1 :(得分:2)
使用Joda-Time库比使用臭名昭着的捆绑java.util.Date&更简单,更简单地完成日期时间工作。 .Calendar类。
使用proper time zone names而不是特定的偏移量通常是一种更明智的方法。
以下是一些使用Joda-Time 2.3的示例代码。
注意:
DateTime
构造函数。...来源
String input = "2014-04-02T07:59:02.111Z";
DateTimeZone timeZone = DateTimeZone.forID( "Asia/Dubai" );
DateTime dateTimeDubai = new DateTime( input, timeZone ); (a) Parse, (b) Adjust time zone.
DateTime dateTimeUtc = dateTimeDubai.withZone( DateTimeZone.UTC );
转储到控制台...
System.out.println( "input: " + input );
System.out.println( "dateTimeDubai: " + dateTimeDubai );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
跑步时......
input: 2014-04-02T07:59:02.111Z
dateTimeDubai: 2014-04-02T11:59:02.111+04:00
dateTimeUtc: 2014-04-02T07:59:02.111Z
答案 2 :(得分:0)
你可以采取你想要的任何模式,比如我有日期+时区。所以你可以根据你设置。这是我的代码。
visit(Advice.to(ThreadPoolExecutorAdvice.class).on(ElementMatchers.any()))
这里我设置了日期格式。
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");