2015-10-14 5 views
2

У меня есть строка, которая представляет дату. Я не знаю формат даты строки. Но только для примера, это может быть любой изпреобразование строкового представления неизвестного формата даты в Date в java

  • 2015-10-14T16: 41: 42.000Z
  • 2015-10-14T19: 01: 53,100 + 01: 00
  • 2015-10- 14 05:20:29

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

Могу ли я использовать joda-время для решения этой проблемы? Как насчет java.util.Date или что-нибудь еще?

обновление

Я думаю, что найти Javascript эквивалент того, что я ищу

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

Но мне нужен ответ на Java.

+3

[Использование API дат и времени Joda для анализа нескольких форматов] (http://stackoverflow.com/questions/3307330/using-joda-date-time-api-to-parse-multiple -форматы) – Pshemo

+0

Оба эти предложения требуют, чтобы я знал формат заранее. Само название моего вопроса указывает «неизвестный» формат :). Вы, ребята, знаете какие-либо шансы получить все возможные форматы даты для моих обстоятельств? (Надеюсь, это очень маленький набор, конечно). Я не против писать несколько парсеров, но дело в том, что формат может быть любым, что действительно для метатега html, содержащего дату. –

+0

Я вижу много голосов за ссылку Jado Date, но на мой вопрос отсутствует мяч. Поэтому я добавил ссылку на эквивалент js. –

ответ

1

ну, это не настоящее «java» решение, но если вы нашли Javascript, то можете использовать Javascript-решение в java, используя ScriptEngine.

просто немного быстро и грязно ... :)

здесь пример кода:

public static void main(String[] args) throws ScriptException, ParseException { 
    ScriptEngineManager manager = new ScriptEngineManager(); 
    ScriptEngine engine = manager.getEngineByName("js"); 
    String[] dateStrings = new String[] { 
      "2015-10-14T16:41:42.000Z", 
      "2015-10-14T19:01:53.100+01:00", 
      "2015-10-14 05:20:29" }; 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); 
    for (String d : dateStrings) { 
     String script = "new Date('" + d + "')"; 
     Object eval = engine.eval(script); 
     Date parsed = sdf.parse(eval.toString().replace("[Date ", "").replace("]", "")); 
     System.out.println(eval + " -> " + parsed); 

    } 

} 

что печатает:

[Date 2015-10-14T16:41:42.000Z] -> Wed Oct 14 18:41:42 CEST 2015 
[Date 2015-10-14T18:01:53.100Z] -> Wed Oct 14 20:01:53 CEST 2015 
[Date 2015-10-14T03:20:29.000Z] -> Wed Oct 14 05:20:29 CEST 2015 

eval.toString() часть может быть явно улучшена. как настройки локали ...

+0

Это может помочь. Тем не менее, я использую приложение. И технологии Google не всегда хорошо сочетаются с другими. Я буду смотреть в него. Благодарю. –

+0

Я смотрю на страницу, но я не совсем уверен, на что я смотрю. Не возражаете ли вы показывать короткий код того, как я буду называть конструкцию JS 'new Date (dateString)' на Java, используя ScriptEngine? –

+0

Я не знаю, работает ли ваш пример, но идея ScriptEngine должна, поэтому я тестирую некоторый код (ваши и мои собственные версии) и буду отчитываться после того, как удастся. Тем временем +1. –

Смежные вопросы