【问题标题】:Date is not getting properly formatted in Java日期在 Java 中的格式不正确
【发布时间】:2024-01-20 16:32:01
【问题描述】:

我正在尝试将格式为“yyyy-MM-dd”的日期格式化为“dd MM, yyyy”,但对于某些日期,我得到的年份不正确。

这是我的代码:

DateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
DateFormat targetFormat = new SimpleDateFormat("dd MMMM, yyyy");
Date date = originalFormat.parse(dob);
dob = targetFormat.format(date);

输入:27-05-1999
输出:0032 年 10 月 19 日

如您所见,输入日期与输出日期不同。我无法理解如何做到这一点。

【问题讨论】:

  • 您的输入模式似乎是“dd-MM-yyyy”
  • 我很困惑为什么你认为年份是第一个输入
  • 您还没有切换到较新的 Java 日期和时间类?是什么阻碍了你?我推荐他们。我什至认为他们会给你一条异常消息,暗示你的尝试出了什么问题(总是一件好事)。

标签: java datetime date-formatting date


【解决方案1】:

你的模式是错误的。你输入27-05-1999,所以正确的日期格式是dd-MM-yyyy

String dob = "27-05-1999";
DateFormat originalFormat = new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH);
DateFormat targetFormat = new SimpleDateFormat("dd MMMM, yyyy");
Date date = originalFormat.parse(dob);
dob = targetFormat.format(date);

System.out.println(dob);

DEMO

【讨论】:

    【解决方案2】:

    您的输入是:27-05-1999,您的日期格式是:yyyy-MM-dd。您实际上使用了错误的日期格式。

    此代码将正常工作。

    String dob = "27-05-1999";
    DateFormat sourceFormat = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault());
    DateFormat destFormat = new SimpleDateFormat("dd MMMM, yyyy", Locale.getDefault());
    Date date = sourceFormat.parse(dob);
    dob = destFormat.format(date);
    System.out.println(dob);  // output : 27 May, 1999
    

    【讨论】:

      【解决方案3】:
          DateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
          DateFormat targetFormat = new SimpleDateFormat("dd MM, yyyy");
          Date date = originalFormat.parse("1999-05-27");
          String dob = targetFormat.format(date);
      
          System.out.println(dob);
      

      查看输入格式,您输入的格式有误。

      如果您希望保持相同的输入格式,请使用以下代码

          DateFormat originalFormat = new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH);
          DateFormat targetFormat = new SimpleDateFormat("dd MM, yyyy");
          Date date = originalFormat.parse("27-05-1999");
          String dob = targetFormat.format(date);
      
          System.out.println(dob);
      

      两种情况下的输出

      1999 年 27 月 5 日

      【讨论】:

        【解决方案4】:

        下面的代码应该让你知道这里有什么问题,

        问题在于这里的表达式,

        //String dob = "1999-05-27";
        //DateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
        
        String dob = "27-05-1999";
        DateFormat originalFormat = new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH);
        
        DateFormat targetFormat = new SimpleDateFormat("dd MMMM, yyyy");
        Date date = originalFormat.parse(dob);
        dob = targetFormat.format(date);
        System.out.println(dob);
        

        您还可以查看 java 文档中的详细表达式信息,以下网址应该可以帮助您:

        http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

        【讨论】: