Как преобразовать неопределенную метку времени с миллисекундами в дату Java - PullRequest
1 голос
/ 12 марта 2012

У меня есть отметка времени как 29-НОЯБРЯ-11 06.05.41.831000000 AM

Используя SimpleDateFormat, я действительно не могу извлечь миллисекунду (.831000000) .... 831 - это миллисекунда (и я не знаю, почему эти 000000. Но это из другого источника. Никакого контроля над этим.)

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

Дополнительные цифры наносекунды. Вы не можете включить их в SimpleDateFormat или стандартные библиотеки. Самое простое, что вы можете сделать в вашем случае, это удалить их перед анализом даты / времени.

0 голосов
/ 12 марта 2012

Рабочее решение ... Как вы видите, довольно строгое выражение для этого довольно скучно.

String input = "29-NOV-11 06.05.41.831000000 AM";

input = input
        .replaceFirst(
                "(\\d+-\\w+-\\d+\\s\\d+\\.\\d+\\.\\d+\\.\\d{3})\\d{6}(\\s(\\w+))",
                "$1$2");
try {
    SimpleDateFormat sdf = new SimpleDateFormat(
            "dd-MMM-yy HH.mm.ss.SSS aa");

    Date date = sdf.parse(input);
    System.out.println(sdf.format(date));

} catch (ParseException e) {
    e.printStackTrace();
}

Вы можете просто использовать substr, если строки всегда имеют фиксированную ширину и вы считаете регулярное выражение немного излишним.

input = input.substring(0, 22) + input.substring(28, 31);
0 голосов
/ 12 марта 2012

Если временная метка представлена ​​строкой, вы можете использовать регулярное выражение для анализа дополнительных нулей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...