Дата в твиттере непарсима? - PullRequest
13 голосов
/ 23 декабря 2010

Я хочу преобразовать строку даты в ответе Twitter в объект Date, но я всегда получаю ParseException и не вижу ошибки!?!

Строка ввода: чт 23 декабря 18:26:07 +0000 2010

SimpleDateFormat Выкройка:

EEE MMM dd HH:mm:ss ZZZZZ yyyy

Метод:

public static Date getTwitterDate(String date) {

SimpleDateFormat sf = new SimpleDateFormat(TWITTER);
sf.setLenient(true);
Date twitterDate = null;
try {
    twitterDate = sf.parse(date);
} catch (Exception e) {}
     return twitterDate;
}

Я тоже пробовал это: http://friendpaste.com/2IaKdlT3Zat4ANwdAhxAmZ но это дает тот же результат.

Я использую Java 1.6 в Mac OS X.

Приветствия

Andi

Ответы [ 7 ]

30 голосов
/ 23 декабря 2010

Ваша строка формата работает для меня, см .:

public static Date getTwitterDate(String date) throws ParseException {

  final String TWITTER="EEE MMM dd HH:mm:ss ZZZZZ yyyy";
  SimpleDateFormat sf = new SimpleDateFormat(TWITTER);
  sf.setLenient(true);
  return sf.parse(date);
  }

public static void main (String[] args) throws java.lang.Exception
    {
      System.out.println(getTwitterDate("Thu Dec 3 18:26:07 +0000 2010"));          
    }

Вывод:

Пт. 03 декабря 18:26:07 GMT 2010

ОБНОВЛЕНИЕ

Роланд Иллиг прав: SimpleDateFormat зависит от локали, поэтому просто используйте явную английскую локаль: SimpleDateFormat sf = new SimpleDateFormat(TWITTER,Locale.ENGLISH);

5 голосов
/ 07 ноября 2011

Это работает для меня;)

public static Date getTwitterDate(String date) throws ParseException
{
    final String TWITTER = "EEE, dd MMM yyyy HH:mm:ss Z";
    SimpleDateFormat sf = new SimpleDateFormat(TWITTER, Locale.ENGLISH);
    sf.setLenient(true);
    return sf.parse(date);
}
4 голосов
/ 24 декабря 2010

Может быть, вы находитесь в регионе, где «Вт» не является распознанным днем ​​недели, например, в Германии.Попробуйте использовать конструктор SimpleDateFormat, который принимает в качестве параметра «Locale», и передайте его «Locale.ROOT».

2 голосов
/ 23 декабря 2010

Вы не должны иметь ZZZZZ, но только Z для часового пояса.

См. Примеры в http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html для получения дополнительной информации.

EEE, d MMM yyyy HH:mm:ss Z> Wed, 4 Jul 2001 12:08:56 -0700

1 голос
/ 10 мая 2016

Функция для конвертирования Twitter Дата:

String old_date="Thu Jul 05 22:15:04 GMT+05:30 2012";

private String Convert_Twitter_Date(String old_date) {

        SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
        SimpleDateFormat old = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZZZ yyyy",Locale.ENGLISH);
        old.setLenient(true);

            Date date = null;
            try {

                date = old.parse(old_date);

            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        return sdf.format(date);    
}

Формат вывода: 05-Jul-2012 11: 54: 30

0 голосов
/ 30 апреля 2019

в C# вы можете сделать это

DateTime date = DateTime.ParseExact(dt, "ddd MMM dd HH:mm:ss +0000 yyyy", CultureInfo.InvariantCulture);

0 голосов
/ 05 апреля 2013

SimpleDateFormat не является потокобезопасным. "EEE MMM dd HH: mm: ss ZZZZZ yyyy" работало в нашем приложении, но в небольшом проценте случаев не удалось. Наконец мы поняли, что проблема связана с несколькими потоками, использующими один и тот же экземпляр SimpleDateFormat.

Вот один из обходных путей: http://www.codefutures.com/weblog/andygrove/2007/10/simpledateformat-and-thread-safety.html

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