2013-03-28 2 views
0

Я хочу проанализировать некоторые строки в Date и форматировать Date в String в другом стиле. При анализе некоторой строки datetime без года я нашел следующие головоломки. У меня есть две разные строки ввода, но выходы одинаковы. Это действительно смущает. Любое предложение, как это исправить? Благодарю.puzzle in datetime parse without year

System.out.println(parseAndFormat("MAR 22 12:10:23", 
       "MMM dd hh:mm:ss", "yyyy-MM-dd a HH:mm:ss.SSS Z")); 
//Actual : 1970-03-22 AM 00:10:23.000 +0800 
//Expected: 1970-03-22 PM 12:10:23.000 +0800 
System.out.println(parseAndFormat("MAR 22 00:10:23", 
       "MMM dd hh:mm:ss", "yyyy-MM-dd a HH:mm:ss.SSS Z")); 
//Actual: 1970-03-22 AM 00:10:23.000 +0800 
//Expected: 1970-03-22 AM 00:10:23.000 +0800 
private static String parseAndFormat(String input, String parse, 
     String format) throws ParseException { 
    DateFormat parser = new SimpleDateFormat(parse, Locale.ENGLISH); 
    DateFormat formater = new SimpleDateFormat(format, Locale.ENGLISH); 
    Date date = parser.parse(input); 
    String result = formater.format(date); 
    return result; 
} 

ответ

2

Вы всегда обеспечиваете hh в качестве входного формата в течение нескольких часов, несмотря на то, что кажется вы предоставляете значения с 24-часовым. Используйте HH вместо hh. Тот факт, что у вас нет значения за год, не имеет к этому отношения.

Обратите внимание, что в вашем формате выхода вы смешиваете формат 24-часовой (HH) с утром/вечером целеуказателем (a), который также нечетные. Почему вы хотите показать «1970-03-22 PM 16: 10: 23.000 +0800», например? Это очень странный формат.

Подробнее см. В документах для SimpleDateFormat, чтобы узнать, что означают различные спецификаторы формата.

+0

Спасибо, Джон, это работает. Я забыл, как использовать «hh» и «HH». Это действительно не относится к годовому полю. –