我正在编写一个java程序来输入年份和月份,格式为“1999-5”,意思是1999年和6月。 (月份从 0=一月,1=二月开始)。
其中 1999 是年份,5 是月份的数字序列(对应于六月)。该程序应显示 1999 年 6 月 28 日是哪一天,在这种情况下,输出将为 MONDAY。
我有逻辑和部分代码。我输入一个字符串,将其拆分,将其解析为整数并进行处理。如何分隔字符串输入中的“-”分隔符。
程序的输入应该是“1999-5” 输出应该是星期一。 (1999年6月28日是星期一)
int num;
Scanner sc=new Scanner(System.in);
String name=sc.nextLine();
String delimiter = "-";
temp= name.split(delimiter);
num= Integer.parseInt(name);
System.out.println(temp);
System.out.println(num);
请告诉我是否有更好的方法。
在这种情况下,您最好使用
SimpeDateFormat
。
Date d = new SimpleDateFormat("yyyy-MM-dd").parse(name + "-28")
使用
Calendar
获取星期几:
Calendar cal = Calendar.getInstance();
cal.setTime(d);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)
//switch (dayOfWeek) ...
更新 @TheStijn 的想法,使用
"-dd"
的模式来操作输入。
但是我们还需要操纵月份来获取六月的输入
5
String pattern = "yyyy-MM-dd";
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
formatter.setLenient(false);
int year = Integer.parseInt(name.substring( 0, name.lastIndexOf( '-' ) ));
int month = Integer.parseInt(name.substring( name.lastIndexOf( '-' )+1 ));
Date date = formatter.parse(year+"-"+(month+1)+"-28");
if( date != null ) {
System.out.println(date);
}
temp
应该是一个字符串数组 (String[] temp
),你通过 parseInt、num[0] 和 num[1] 分别得到 1999 和 5。
YearMonth.parse( "1999-05" )
以“1999-5”格式输入年份和月份
如果有更好的方法。
更好的方法是要求用户以标准 ISO 8601 格式输入年月:YYYY-MM
java.time.YearMonth
然后直接解析为
[java.time.YearMonth
]2对象。 java.time 类默认使用 ISO 8601 格式,因此无需指定格式模式。
YearMonth ym = YearMonth.parse( "1999-05" ) ;
DateTimeFormatter.ofPattern
否则,请定义格式模式以匹配您的非标准输入。
String input = "1999-5";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "yyyy-M" );
YearMonth ym = YearMonth.parse ( input , f );
ym.toString() = 1999-05