2015-01-07 2 views

ответ

1

EDIT: Ну, я нашел что-то новое!

Вы можете использовать Timestamp.valueOf() для форматирования строки времени со значением yyyy-[m]m-[d]d hh:mm:ss[.f...] Так что он также может обрабатывать микро/nano секунды. Единственное, что вам нужно сделать, это заменить Tпробелом.

Это работает:

String datetimeLocal = "1985-04-12T23:20:50.52"; 
System.out.println(Timestamp.valueOf(datetimeLocal.replace("T"," "))); 

Выход:

1985-04-12 23:20:50.52 

Согласно this site ваш resetTimeString выглядит следующим образом: '1985-04-12T23: 20: 50,52' (a)

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

String[] dateTime = datetimeLocal.split("T"); 
String[] date = dateTime[0].split("-"); 
String[] time = dateTime[1].split(":"); 

Это будет печатать:

System.out.println("DateTime: " + Arrays.toString(dateTime)); 
System.out.println("Date: " + Arrays.toString(date)); 
System.out.println("Time: " + Arrays.toString(time)); 

>>> DateTime: [1985-04-12, 23:20:50] 
>>> Date: [1985, 04, 12] 
>>> Time: [23, 20, 50] 

После этого вы можете просто создать новая Отметка: (Это не рекомендуется!)

Timestamp stamp = new Timestamp(Integer.valueOf(date[0]).intValue() - 1900, 
      Integer.valueOf(date[1]).intValue(), 
      Integer.valueOf(date[2]).intValue(), 
      Integer.valueOf(time[0]).intValue(), 
      Integer.valueOf(time[1]).intValue(), 
      Integer.valueOf(time[2].split("\\.")[0]).intValue(), 
      Integer.valueOf(time[2].split("\\.")[1]).intValue()); 

Обратите внимание, что, если вы используете это, вы должны вычесть «1900» от года и раскола точек с \\.

Кроме того, вы должны обращаться с наносекунд (в моем примере я использую значение 50.52 в секундах, но строка, возвращаемая с сервера не может содержать наносекунд)

Можно также вычислить длинный от даты и использовать new Timestamp(<long>)

Я надеюсь, что это помогает :) Ответу

+0

Я надеялся, что там может быть другой, более удобный способ сделать это. Но спасибо в любом случае :) – Aliaxander

+0

Посмотрите в начало моего сообщения ... Я думаю, что это поможет вам лучше :) – Cyphrags

+0

Вариант действительно лучше. Благодаря! – Aliaxander

1

Cyphrags' не будет работать, если секунды устанавливаются "00", потому что Chrome не будет посылать секундную часть приводит к java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff] при вызове Timestamp.valueOf() ,

Поэтому более полный ответ может быть:

String datetimeLocal = "1985-04-12T23:20"; 
// make sure the seconds are set before parsing 
if (StringUtils.countMatches(datetimelocal, ":") == 1) { 
    datetimelocal += ":00"; 
} 
Timestamp value = Timestamp.valueOf(datetimeLocal.replace("T", " ")); 
+0

Добро пожаловать в SO! Я взял на себя смелость удалить вашу преамбулу, потому что это могло заставить кого-то почувствовать, что ваш не является фактическим ответом (поэтому вызывает его удаление), хотя я думаю, что это так. Не стесняйтесь отклонять/редактировать по-другому –