2016-04-26 7 views
0

Вот мой код в Java 1.6 (вопрос был отмечен дубликат, но предложенное решение относится к Java 1.8)Проблемы, связанные с преобразованием временной метки

public static void main(String[] args){ 
    try{ 
     String dateTimeString = "2015-08-10-14.20.40.679279"; 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSSSSS"); 
     java.util.Date formattedDate = dateFormat.parse(dateTimeString); 
     Timestamp formattedTime = new Timestamp(formattedDate.getTime()); 
     System.out.println(formattedTime); 
    } catch (Throwable t){ 
     t.printStackTrace(); 
    } 
} 

Приведенное объект: 2015-08-10 14:31:59.279, так что явно что-то не так во время разбора минут, секунд и миллисов, я просто не знаю, что именно.
Спасибо!

+1

Что такое '679279'? миллис (не выглядит правильно)? доли секунд (т. е. микросекунды, и в этом случае вам нужно избавиться от последних 3 цифр, потому что API дат поддерживает только миллисы)? – assylias

+0

Основная часть упомянутой функциональности Java 8 (java.time) обратно переносится на Java 6 и 7 в проект [ThreeTen-Backport] (http://www.threeten.org/threetenbp/). Огромное улучшение по сравнению с трудными классами наследия, которые вы используете здесь. И классы java.time используют наносекундное разрешение (9 знаков после запятой), поэтому могут вместить ваши данные микросекунд (6 знаков после запятой) без потери данных и без хлопот. –

ответ

2

Нет ничего похожего на SSSSSS. Проверить Simple Date Format manual

+0

Да, это говорит «millis», поэтому вы думаете, что если я положу SSS, он будет работать нормально с вводом 6 цифр? – urir

+0

Нет, не будет. Просто обрезайте последние 3 цифры. – mariusz2108

+0

Спасибо, я думаю, у меня нет выбора, кроме как потерять эти данные – urir

1

Вы должны выпадать последние 3 мс:

Date d = (new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS", Locale.US)).parse("2015-08-10-14.20.40.679279"); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.S").format(d)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SS").format(d)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS").format(d)); 

     Date dd = (new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS", Locale.US)).parse("2015-08-10-14.20.40.679"); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.S").format(dd)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SS").format(dd)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS").format(dd)); 

, чтобы получить правильное форматирование:

2015-08-10-14.31.59.279 
2015-08-10-14.31.59.279 
2015-08-10-14.31.59.279 
2015-08-10-14.20.40.679 
2015-08-10-14.20.40.679 
2015-08-10-14.20.40.679 

проверить его это playground.

+0

Спасибо, хорошо выглядит – urir