Ошибка преобразования строки Java в формат даты yyyyMMddhhmmss - PullRequest
0 голосов
/ 08 мая 2018

Я получаю сообщение об ошибке только для определенного строкового поля, ниже приведен мой код

public static void main(String[] args) throws ParseException {

    String sDate1="201710164425";  
    Date date1=new SimpleDateFormat("yyyyMMddhhmmss").parse(sDate1);  
    System.out.println(sDate1+"\t"+date1);  
}

Если я изменяю String на добавление 0 до 4 sDate1="2017101604425";, это работает нормально, я получаю Mon Oct 16 04:42:05 IST 2017, но мой ввод происходит следующим образом sDate1="201710164425"; Помогите мне найти лучшее решение для этого, заранее спасибо

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

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

 yyyyMMddKmmssa

Где

 K  - Hour in am/pm (0-11)
 a  - Am/pm marker

Обратите внимание, что вам нужен последний 'a' . Если вы хотите, чтобы только одна цифра 4 указывала на 04:00 и 16:00, вам нужно что-то различать между ними.

0 голосов
/ 08 мая 2018

Вам нужно иметь «значение часа» без начального нуля, я также вижу, что минуты и / или секунды должны быть одинаковыми, поэтому вы можете использовать формат времени, например Hms.

  • H: час в день (0-23) или (k: час в день (1-24))
  • м: минута в час
  • с: секунда в минуту

По сравнению с HHmmss формат, подобный Hms, будет занимать только наименьшее количество цифр для каждого поля (что более сложно, но это идея).

Задача

Это может быть неправильно истолковано. Допустим, я хочу отправить вам время вроде 01:21:05, оно будет выглядеть как 1215 в соответствии с нужным вам шаблоном.

new SimpleDateFormat("Hms")

1215 -> 01: 02: 15

Видите проблему? 01:21:05 придет 01:02:15.

Я всегда предлагаю использовать ведущий ноль (две цифры) для каждого поля, чтобы предотвратить любую ошибку.

Решение

  1. Использовать начальный ноль

Используйте две цифры для каждого поля, чтобы избежать проблем

new SimpleDateFormat("HHmmss")

012105 -> 01: 21: 05

  1. Добавить несколько разделителей

Вы можете определить шаблон для использования разделителя между каждым полем:

new SimpleDateFormat("H:m:s")

1: 21: 5 -> 01:21:05

0 голосов
/ 08 мая 2018
yyyyMMddhhmmss  <- format
201710164425    <- data

так что для 4-го часа вам нужно сделать 04 (чч) вместо 4. То же самое для минут.

...