gpt4 book ai didi

java - Calendar类型的set(int,int)方法不适用于参数(int,String)

转载 作者:行者123 更新时间:2023-12-02 11:15:50 27 4
gpt4 key购买 nike

Java代码从指定的星期几,月份的星期几,月份和年份创建日期作为输入。示例-如果iput如下所示:

day-Monday, month-july, week-1, year-2018,



然后输出应该是02/07/2018。

下面是使用的代码:
        System.out.println("Enter a year,month,week,day:");
int year = Integer.parseInt(obj.nextLine());
int month = Integer.parseInt(obj.nextLine());
int week = Integer.parseInt(obj.nextLine());
String day = obj.nextLine();

String date;

SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy/MM/dd");

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year); // set the year
cal.set(Calendar.MONTH, month-1); // set the month
cal.set(Calendar.WEEK_OF_MONTH, week);

//***error in the below line********
cal.set(Calendar.DAY_OF_WEEK,day);

date=dateFormat.format(cal.getTime());
System.out.println("Result:" +date);

标记的行将无法编译。为什么不?我该如何解决?

最佳答案

您似乎缺少的一点是,当用户输入“Monday”时,您需要将此字符串转换为Java在一周中的某一天都可以理解的字符串。这是通过解析完成的。幸运的是,使用现代Java日期和时间API java.time,它并不那么难(当您知道如何使用时)。这是我们在以下代码中使用dowFormatter的代码(星期几的Dow):

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");

DateTimeFormatter dowFormatter
= DateTimeFormatter.ofPattern("EEEE", Locale.getDefault(Locale.Category.FORMAT));
DayOfWeek dow = DayOfWeek.from(dowFormatter.parse(day));

WeekFields wf = WeekFields.of(Locale.getDefault(Locale.Category.DISPLAY));

LocalDate date = LocalDate.of(year, month, 15)
.with(dow)
.with(wf.weekOfMonth(), week);
System.out.println("Result: " + date.format(dateFormatter));

现在,当我输入2018、7、1和星期一时,我得到:

Result: 2018/07/02



如果要控制用户应输入星期几的语言,请将适当的语言环境传递给格式化程序(而不是 Locale.getDefault(Locale.Category.FORMAT))。如果您只想使用英文,则可以使用较短的 DayOfWeek dow = DayOfWeek.valueOf(day.toUpperCase(Locale.ROOT));,但这有点麻烦。

如果要控制使用的星期方案,请将适当的语言环境传递给 WeekFields.of()或仅指定 WeekFields.ISOWeekFields.SUNDAY_START

我建议您不要使用 SimpleDateFormatCalendar。这些类(class)早已过时。 java.time更好用。

链接: Oracle tutorial: Date Time解释了如何使用 java.time

关于java - Calendar类型的set(int,int)方法不适用于参数(int,String),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51304394/

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