如何在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

您需要指示读取格式化程序将输入解释为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

乔达时间

使用Joda-Time库比使用臭名昭着的捆绑java.util.Date和.Calendar类更容易和更简单地完成日期时间工作。

时区

使用适当的时区名称而不是特定的偏移量通常是一种更明智的方法。

示例代码

以下是使用Joda-Time 2.3的一些示例代码。

注意:

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

资源…

 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 

你可以采取任何你想要的模式,比如我有日期+时区。 所以你可以根据你设置。 这是我的代码。

  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 

在这里我设置了日期格式。

 String currentDate = dateFormat.format(currentLocalTime); String localTime = date.format(currentLocalTime);// to get the time zone i have used this. String newtime=currentDate+localTime;// and then i have apeend this now print log you will get the desire result.