Дата Twitter недоступна?
Я хочу преобразовать строку даты в ответ 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.
Приветствия,
Анди
Ответы
Ответ 1
Ваша строка формата работает для меня, смотрите:
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);
Ответ 2
Это работает для меня;)
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);
}
Ответ 3
Возможно, вы находитесь в регионе, где "Tue" не является признанным днем недели, например, немецким. Попробуйте использовать конструктор "SimpleDateFormat", который принимает параметр "Locale" в качестве параметра и передает его "Locale.ROOT".
Ответ 4
Вы не должны иметь 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
Ответ 5
Функция для преобразования 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
Ответ 6
SimpleDateFormat не является потокобезопасным. "EEE MMM dd HH: mm: ss ZZZZZ yyyy" работала в нашей заявке, но не в небольшом проценте случаев. Наконец, мы поняли, что проблема связана с несколькими потоками, используя тот же экземпляр SimpleDateFormat.
Вот один способ: http://www.codefutures.com/weblog/andygrove/2007/10/simpledateformat-and-thread-safety.html
Ответ 7
в C#
вы можете сделать это
DateTime date = DateTime.ParseExact(dt, "ddd MMM dd HH:mm:ss +0000 yyyy", CultureInfo.InvariantCulture);