帮助这个java程序

问题描述 投票:0回答:5

我正在编写一个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);

请告诉我是否有更好的方法。

java
5个回答
2
投票

在这种情况下,您最好使用

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) ...

2
投票

更新 @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);
}

1
投票

你可以这样做:

    String name = "1999-5";
    String[] temp = name.split("-");
    int year = Integer.parseInt(temp[0]);
    int month = Integer.parseInt(temp[1]);

注意

parseInt()
可能会抛出
NumberFormatException
,所以你可能想接住它。

顺便说一句,Joda Time 可以为您获取星期几:看看这里


0
投票

temp
应该是一个字符串数组 (
String[] temp
),你通过 parseInt、num[0] 和 num[1] 分别得到 1999 和 5。


0
投票

tl;博士

YearMonth.parse( "1999-05" )

ISO 8601

以“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

© www.soinside.com 2019 - 2024. All rights reserved.