gpt4 book ai didi

java - 来自 Calendar.getDisplayName() 的错误工作日

转载 作者:行者123 更新时间:2023-11-29 07:37:33 24 4
gpt4 key购买 nike

我正在尝试获取给定日期(例如生日)的工作日。因此,我正在使用 Calendar 对象并调用 getDisplayName() 方法。但是每次该方法返回错误值时,工作日都会提前两天。例如:输入:23.11.2015 -> Wednesday

代码:

Scanner s = new Scanner(System.in);
System.out.println("Please enter your birthday. Format: DD.MM.YYYY");
String bday = s.nextLine();
String day_of_birth = bday.substring(0, bday.indexOf(".")); // start to first dot = day
String month_of_birth = bday.substring(bday.indexOf(".")+1, bday.lastIndexOf(".")); // between first dot and last dot = month
String year_of_birth = bday.substring(bday.lastIndexOf(".")+1); // last dot to end = year
Calendar birthday = Calendar.getInstance();
birthday.set(Integer.parseInt(year_of_birth), Integer.parseInt(month_of_birth), Integer.parseInt(day_of_birth));
String weekday = birthday.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());
System.out.println("Weekday of birth: " + weekday); // wrong

最佳答案

  1. > Calendar#set期望值按日期顺序
  2. 日历 月份是基于0 的,而不是基于1 的。因此一月是 0 而不是 1(感谢 HovercraftFullOfEels)

您应该避免使用 String 解析这些类型的问题,而是使用自定义 DateFormat 来解析输入的 String 然后 utalise Calendar

try {
Scanner s = new Scanner(System.in);
System.out.println("Please enter your birthday. Format: DD.MM.YYYY");
String bday = s.nextLine();

Date date = new SimpleDateFormat("dd.MM.yyyy").parse(bday);

Calendar birthday = Calendar.getInstance();
birthday.setTime(date);
String weekday = birthday.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());
System.out.println("Weekday of birth: " + weekday); // wrong }
} catch (ParseException exp) {
exp.printStackTrace();
}

对于 24.11.2015 的输入,输出 Weekday of birth: Tuesday

当然,您可以简单地使用 Java 8 中的新时间 API,例如...

Scanner s = new Scanner(System.in);
System.out.println("Please enter your birthday. Format: DD.MM.YYYY");
String bday = s.nextLine();

LocalDate ld = LocalDate.parse(bday, DateTimeFormatter.ofPattern("dd.MM.yyyy"));
System.out.println("DayOfWeek = " + ld.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.getDefault()));

关于java - 来自 Calendar.getDisplayName() 的错误工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33881704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com