【问题标题】:Java Date of Birth Input and OutputJava 出生日期输入和输出
【发布时间】:2022-01-23 11:21:31
【问题描述】:

我正在尝试使用扫描仪方法让我以这种格式输入出生日期 - mm/dd/yy 我想得到的输出是这样的。

Input - 02/06/12
Output - February 6, 2012

我也在尝试限制 day(dd) 的值并确保它不超过 32,并且 year(yy) 的值不超过 2022。我假设我将输入保存为字符串,但是我不确定如何将它们分开并有一个条件可以为每个月分配某些字符串值。

【问题讨论】:

标签: java string java.util.scanner


【解决方案1】:

解析为LocalDate 对象。自动本地化以生成输出文本。

LocalDate
.parse( 
    "02/06/12" ,
    DateTimeFormatter.ofPattern( "MM/dd/uu" )
)
.format(
    DateTimeFormatter
    .ofLocalizedDate( FormatStyle.MEDIUM )
    .withLocale( Locale.US ) 
)

要处理错误输入,请捕获DateTimeParseException

要限制年份,请使用LocalDate#getYear 查询年份。或者,构建自定义 Jakarta Bean Validation 约束。

所有这些都已经在 Stack Overflow 上多次介绍过。所以搜索以了解更多信息。

【讨论】:

    【解决方案2】:

    以下是上述问题陈述的工作代码,如下所示。请相应地添加日期逻辑,因为我假设您将以YYYY 格式提交日期。

     public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter Date:");
        String date = scanner.nextLine();  // Read user input
        System.out.println("Submitted Date is: " + date);  // Output user input
        String arr[] = date.split("/");
        System.out.println("Output --> " + getMonth(arr[0]) + " " + getDate(arr[1]) + ", " + arr[2]);
      }
    
      public static String getMonth(String month) {
        if (Integer.parseInt(month) > 12) {
          throw new IllegalArgumentException("Invalid Month");
        }
        switch (month) {
          case "01":
            return "January";
          case "02":
            return "February";
          case "03":
            return "March";
          case "04":
            return "April";
          case "05":
            return "May";
          case "06":
            return "June";
          case "07":
            return "July";
          case "08":
            return "August";
          case "09":
            return "September";
          case "10":
            return "October";
          case "11":
            return "November";
          case "12":
            return "December";
          default:
            return "Invalid Month";
        }
      }
    
      public static String getDate(String date) {
        if (date.startsWith("0")) {
          return String.valueOf(date.charAt(1));
        }
        if (Integer.parseInt(date) > 31) {
          throw new IllegalArgumentException("Invalid Date");
        }
        return date;
      }
    

    【讨论】:

    • Java 为这项工作提供了日期时间类。无需自己编写所有这些解析和生成代码。
    • 知道了,谢谢@BasilBourque 提供的宝贵信息。
    猜你喜欢
    • 1970-01-01
    • 2022-06-16
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多