Java Date Parse из одного формата в другой - PullRequest
2 голосов
/ 12 октября 2010

Есть ли способ, посредством которого формат даты может быть определен в Java аналогично .Net?

Рассмотрим следующий пример:

private String reformatDateString(String dateParam){
    if(dateParam == null || dateParam.isEmpty()){
        return null;
    }
    try{
        SimpleDateFormat inDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date fromDate = inDateFormat.parse(dateParam);

        SimpleDateFormat outDateForm = new SimpleDateFormat("yy-MM-dd");
        return outDateForm.format(fromDate);
    } catch(ParseException e){
        e.printStackTrace();
        return null;
    }
}

Есть ли для синтаксического анализатора более простой способ узнать inDateFormat вместо строгого указания двух форматов?

Ответы [ 2 ]

1 голос
/ 12 октября 2010

Лучший способ, о котором я могу думать, - это старый Date(String) конструктор, который использует статический метод Date.parse(String).Он может или не может фактически поддерживать эти синтаксисы.

Из Javadoc Date.parse(String):

Он принимает много синтаксисов;в частности, он распознает стандартный синтаксис даты IETF: «Сб, 12 августа 1995 г., 13:30:00 по Гринвичу».Он также понимает сокращения часовых поясов континентальной части США, но для общего использования следует использовать смещение часового пояса: «Сб, 12 августа 1995 г. 13:30:00 GMT + 0430» (4 часа 30 минут к западу от Гринвичамеридиан).Если часовой пояс не указан, предполагается местный часовой пояс.GMT и UTC считаются эквивалентными.

К сожалению этот метод устарел в пользу явного указания формата даты , поэтому вам потребуется использовать вспомогательный метод.Ваш код выше - хорошее начало, поэтому я рекомендую просто расширить то, что у вас есть.В документации по функции разбора даты .NET, вероятно, перечислены поддерживаемые форматы.С вашей собственной реализацией будет четкий приоритет форматов и никакой двусмысленности.

Быстрый поиск выявил другие вопросы, указывающие на то, что SimpleDateFormat - это путь для разбора дат.См. Не осуждаемый точный эквивалент Date (String s) в Java?

1 голос
/ 12 октября 2010

Меня заинтересовал ваш вопрос, поэтому проверил JavaDoc для SimpleDateFormat, DateFormat, Date и Calendar, чтобы посмотреть, смогу ли я решить эту проблему.

Если вы знаете, что переданная строка даты всегда будет иметь формат, подходящий для текущей локали, вы можете использовать фабричные методы в DateFormat, методы GetDateInstance.

Кроме этого ... Я должен был сказать нет. По крайней мере, насколько мне известно.

Я с интересом посмотрю этот вопрос.

...