Twitter date unparseable?

后端 未结 7 2033
误落风尘
误落风尘 2020-12-11 15:52

I want to convert the date string in a Twitter response to a Date object, but I always get a ParseException and I cannot see the error!?!

Input string: Thu Dec 23 18

相关标签:
7条回答
  • 2020-12-11 16:07

    This works for me ;)

    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);
    }
    
    0 讨论(0)
  • 2020-12-11 16:07

    in C# you can do like this

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

    0 讨论(0)
  • 2020-12-11 16:08

    Your format string works for me, see:

    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"));          
        }
    

    Output:

    Fri Dec 03 18:26:07 GMT 2010

    UPDATE

    Roland Illig is right: SimpleDateFormat is Locale dependent, so just use an explicit english Locale: SimpleDateFormat sf = new SimpleDateFormat(TWITTER,Locale.ENGLISH);

    0 讨论(0)
  • 2020-12-11 16:13

    Maybe you are in a locale where ‘Tue‘ is not a recognized day of week, for example German. Try to use the ‘SimpleDateFormat‘ constructor that accepts a ‘Locale‘ as a parameter, and pass it ‘Locale.ROOT‘.

    0 讨论(0)
  • 2020-12-11 16:13

    Function for convert Twitter Date :

    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);    
    }
    

    The output format like : 05-Jul-2012 11:54:30

    0 讨论(0)
  • 2020-12-11 16:18

    SimpleDateFormat is not thread safe. "EEE MMM dd HH:mm:ss ZZZZZ yyyy" was working in our application, but failing in a small percentage of cases. We finally realized that the issue was coming from multiple threads using the same instance of SimpleDateFormat.

    Here is one workaround: http://www.codefutures.com/weblog/andygrove/2007/10/simpledateformat-and-thread-safety.html

    0 讨论(0)
提交回复
热议问题