2012-07-03 5 views
0

тружусь на обратный отсчет виджета .The проблема описана нижеAndroid Дата Для Миль (ISO 8601)

'2012-07-04T15:00:00Z' - > '1341414000000' 

'1341414000000' - > indicate 2012 july 4th 20:30 

, почему это случилось? , Я использую Joda

final String format = "yyyy-MM-dd'T'HH:mm:ssZ"; 

DateTimeFormatter formatter = DateTimeFormat.forPattern(format); 
      DateTime endTime = formatter.parseDateTime(strDate); 
       long diff=endTime.getMillis(); 
+0

Где вы находились? С кем вы работаете? Скорее всего, синтаксический анализ происходит в вашем локальном, но конверсия возвращается в GMT или наоборот. –

+0

Я в Индии, и я получаю от нас – Bytecode

ответ

0
String time="2012-07-04T15:00:00Z"; 
     DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); 
     df.setTimeZone(TimeZone.getTimeZone("UTC")); 
     // time.replace("Z",""); 
     try { 
      Date date=df.parse(time); 
      long diff=date.getTime()-System.currentTimeMillis(); 
      System.out.println("Date "+diff); 
     } catch (ParseException e) { 

      e.printStackTrace(); 
     } 
0

Это похоже на старый вопрос, но я отвечу на него в любом случае, так как другие люди могут найти это.

В Joda есть класс для ISO 8601 форматов, поэтому вместо того, чтобы указать формат вручную, вы можете использовать этот класс следующим образом:

import org.joda.time.format.DateTimeFormatter; 
import org.joda.time.format.ISODateTimeFormat; 
import org.joda.time.DateTime; 

String strDate = "2012-07-04T15:00:00Z"; 

DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis(); 
DateTime endTime = formatter.parseDateTime(strDate); 
long diff=endTime.getMillis(); 

С другой стороны, проблема, что вы, кажется, связанный с часовым поясом. Когда вы конвертируете назад из строки millis to date, она преобразуется с использованием местного часового пояса. Если вы хотите, чтобы получить дату в формате UTC, вы должны сделать следующее:

import org.joda.time.DateTimeZone; 
import org.joda.time.DateTime; 

DateTime dt = new DateTime(1341414000000).withZone(DateTimeZone.UTC); 

Он вернется 2012-07-04T15: 00: 00.000Z, как и ожидалось. Если вы хотите отформатировать его без миллисекунд, вы можете использовать один и тот же форматировщик, как и раньше:

import org.joda.time.DateTimeZone; 
import org.joda.time.format.DateTimeFormatter; 
import org.joda.time.format.ISODateTimeFormat; 
import org.joda.time.DateTime; 

DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis(); 
DateTime dt = new DateTime(1341414000000).withZone(DateTimeZone.UTC); 
formatter.print(dt) 

И вернется 2012-07-04T15: 00: 00Z.

Смежные вопросы