代码之家  ›  专栏  ›  技术社区  ›  user3616977

Java SimpleDataformat在月份返回零

  •  2
  • user3616977  · 技术社区  · 8 年前

    这可能是重复的,但我无法理解为什么当指定为MMM时,月份返回为零,并且可以很好地与mm(数字)配合使用。如果你能帮上忙,我将不胜感激?

    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Base64;
    import java.util.Date;
    import java.util.Locale;
    
     public class time1 {
    
     public static void main(String[] args) {
    
        DateFormat originalFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
        DateFormat targetFormat = new SimpleDateFormat("yyyy-mm-dd");
        Date date = null;
        try {
                date = originalFormat.parse("26-Aug-2011");
        } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
        String formattedDate = targetFormat.format(date);
        System.out.println("old date: " + date);
        System.out.println("new date: " + formattedDate);
     }
    }
    

    旧日期:2011年8月26日星期五00:00:00
    新日期:2011-00-26

    当格式更改为dd-mm-yyyy且日期为26-08-2011时,输出为

    旧日期:2011年1月26日星期三00:07:00
    新日期:2011-07-26

    2 回复  |  直到 8 年前
        1
  •  10
  •   Anonymous    8 年前

    documentation

    DateFormat targetFormat = new SimpleDateFormat("yyyy-mm-dd");
    

    需要更改为

    DateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd");
    // this gives you the Date in Digits.
    

    根据文件,

    “M”表示一年中的月份,而

    因此,您的“mm”返回的分钟数默认为00:00,这是您得到的输出。这将为您提供以下输出。

    old date: Fri Aug 26 00:00:00 IST 2011
    new date: 2011-08-26
    
        2
  •  4
  •   Basil Bourque    8 年前

    您正在使用麻烦的旧日期时间类,这些类现在是遗留的,被java取代。时间课程。

    String input = "26-Aug-2011" ;
    DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , Locale.US ) ;
    LocalDate ld = LocalDate.parse( input , f ) ;
    

    您想要的YYYY-MM-DD输出格式恰好符合 ISO 8601 标准java。时间类在解析/生成字符串时默认使用标准格式。

    String output = ld.toString() ;
    

    2011-08-26

    code run live at IdeOne.com .


    关于java。时间

    这个 java.time legacy 日期时间类,例如 java.util.Date , Calendar ,& SimpleDateFormat .

    这个 Joda-Time maintenance mode ,建议迁移到 课程。

    要了解更多信息,请参阅 Oracle Tutorial . 和搜索堆栈溢出的许多例子和解释。规格为 JSR 310 .

    在哪里可以获得java。时间课程?

    这个 ThreeTen-Extra project扩展了java。额外上课的时间。该项目是未来可能添加到java的一个试验场。时间您可以在这里找到一些有用的类,例如 Interval , YearWeek YearQuarter more .