2016-08-11 3 views
-1

У меня возникают проблемы с преобразованием строки, которая имеет этот формат для даты с сервера в длинный?Как преобразовать эту строку даты в длинную?

Example Date String - "2016-07-04T00:02:34.457Z" (Note this is a string) 

Я попытался это ниже, но потребности попытаться поймать вокруг gmt, когда я добавляю его и не пустой вокруг cmtDt - то я инициализировать cmtDt до 0 предварительно установив его на дне, и это всегда 0.

Calendar c = Calendar.getInstance(); 
TimeZone tz = c.getTimeZone(); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ"); 
formatter.setTimeZone(tz); 
Date gmt = formatter.parse(comment.getDateCommented()); 
cmtDt = gmt.getTime(); 

ответ

1

Ваш формат строки для SimpleDateFormat должно быть:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS"); 

Мой тестовый код, который работает в:

Calendar c = Calendar.getInstance(); 
TimeZone tz = c.getTimeZone(); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS"); 
formatter.setTimeZone(tz); 
Date gmt = formatter.parse("2016-07-04T00:02:34.457Z"); 
long cmtDt = gmt.getTime(); 
System.out.println("cmtDt = " + cmtDt); 
+0

Timezone не похож на работу, стараясь, чтобы он локально влияет и она показывает будущую дату ... я добавление что неправильно тогда – Lion789

0

Формат в SDF должен быть исправлен. Следующее вам поможет.

Calendar c = Calendar.getInstance(); 
    TimeZone tz = c.getTimeZone(); 
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX"); 
    formatter.setTimeZone(tz); 
    Date gmt = formatter.parse("2016-07-04T00:02:34.457Z"); 
    long cmtDt = gmt.getTime(); 
    System.out.println(cmtDt); 

Печать: 1467599640457

3

Во-первых, ваш вход String включает миллисекунды (и ваш формат не делает). Во-вторых, ваш вход String включает в себя буква Z (что, предположительно, указывает часовой пояс UTC). Наконец, получение вашего системного часового пояса и присвоение его formatter не будет надежно UTC. Вам нужно что-то подобное,

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'"); 
formatter.setTimeZone(TimeZone.getTimeZone("UTC")); 
try { 
    Date gmt = formatter.parse("2016-07-04T00:02:34.457Z"); 
    long cmtDt = gmt.getTime(); 
    System.out.println(cmtDt); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Что я побежал, и получил

1467590554457 
+0

Я пробовал этот код, получая 0 сейчас, код @ Jason выше работал только с аспектом часового пояса – Lion789

+0

@ Lion789 Обратите внимание, что мой код (если вы скопировали и вставили затем tsk-tsk) сделал 'cmtDt' локальным в попытке (и, таким образом, он затеняет любой другой 'cmtDt', который у вас есть). Наконец, попробуйте отладчик. –

+0

Местный? У меня cmtDt установлен за его пределами, если это не должно работать? – Lion789

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