Date value wrongly formatted

前端 未结 3 1321
悲哀的现实
悲哀的现实 2021-01-21 12:03

I am trying to convert a String DateTime value which is present in a flat file as a Date object after parsing the flat file in my code.

I have

3条回答
  •  不思量自难忘°
    2021-01-21 12:47

    Because you are not formatting a date. Look at the example

      public static void main(String[] args){
        Locale currentLocale = Locale.US;
        DateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss zz yyyy", currentLocale);
        Date date = null;
        Date today;
        try {
          today = new Date();
          String result = f.format(today);
          System.out.println("Locale: " + currentLocale.toString());
          System.out.println("Result: " + result);
          date = f.parse("Tue Aug 23 20:00:03 PDT 2011");
        } catch (ParseException e) {
          e.printStackTrace();  
        }
        System.out.println("---date----" + f.format(date));
      }
    

    will output

    Locale: en_US
    Result: Tue Sep 25 19:12:38 EEST 2012
    ---date----Tue Aug 23 20:00:03 PDT 2011
    

    Now, you have a bit modified code

      public static void main(String[] args){
        Locale currentLocale = Locale.US;
        DateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss zz yyyy", currentLocale);
        DateFormat f2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zz yyyy", currentLocale);
        Date date = null;
        Date today;
        try {
          today = new Date();
          String result = f.format(today);
          System.out.println("Locale: " + currentLocale.toString());
          System.out.println("Result: " + result);
          date = f.parse("Tue Aug 23 20:00:03 PDT 2011");
          System.out.println("---date----" + f.format(date));
          System.out.println("---date----" + f2.format(date));
    
        } catch (ParseException e) {
          e.printStackTrace();
        }
      }
    

    which outputs to

    Locale: en_US
    Result: Tue Sep 25 20:42:10 EEST 2012
    ---date----Tue Aug 23 20:00:03 PDT 2011
    ---date----Wed Aug 24 06:00:03 EEST 2011  
    

    seems that SimpleDateFormat don't care about timezone even if 'z' pattern is specified. It is setting the timezone when it parses the input. That's how I can describe that a strange behavior. Then use of 'z' pattern seems obsolete and lead to unpredictable results.

    so setting the TimeZone will fix the issue

    f2.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
    

提交回复
热议问题