如何在android中设置TimeZone

时间:2014-04-02 14:14:15

标签: java android timezone

在这里这样做,但仍然没有翻译成所需的:

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

3 个答案:

答案 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的示例代码。

注意:

  • Joda-Time为ISO 8601格式的字符串内置解析器。无需实例化解析或格式化对象。
  • Joda-Time正在解析UTC字符串将其调整到另一个时区,只需一次调用DateTime构造函数。
  • 在最后一行转换为基于UTC的dateTime时,我们在Universe的时间轴中仍然有相同的时刻(自Unix epoch以来的毫秒数)。

...来源

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