我有这段代码,用于查找特定日期的星期几。 (例如:09/21/2016 =星期三)。
目前,用户逐个输入月,日和年。但是,我想更改它,以便用户可以以MM / DD / YYYY格式输入。
我无法从MM / DD / YYYY格式中分割月,日和年。
Scanner keyboard = new Scanner(System.in);
double MM;
double DD;
double YYYY;
double pOne;
double pTwo;
double pThree;
int pFour;
System.out.print("Enter the month (MM): ");
MM = keyboard.nextInt();
System.out.print("Enter the day (DD): ");
DD = keyboard.nextInt();
System.out.print("Enter the year (YYYY): ");
YYYY = keyboard.nextInt();
pOne = (YYYY - ((14 - MM) / 12));
pTwo = (pOne + ((pOne / 4) - (pOne / 100) + (pOne / 400)));
pThree = ((MM + 12) * ((14 - MM) / 12) - 2);
pFour = (int) ((DD + pTwo + ((31 * pThree) / 12)) % 7);
答案 0 :(得分:1)
提示用户以您想要的格式输入日期,即MM/DD/YYYY
。然后像这样使用split()
:
String date = keyboard.nextLine();
String[] parts = date.split("/");
double MM = Double.valueOf(parts[0]);
double DD = Double.valueOf(parts[1]);
double YYYY = Double.valueOf(parts[2]);
然后在计算中使用双变量。
阅读此SO post,了解Double.parseDouble()
与Double.valueOf()
之间的差异。
答案 1 :(得分:0)
您可以拆分字符串,然后将每个结果解析为double,
String myDate = "09/21/2016";
double MM = Double.parseDouble(myDate.split("/")[0]));
double DD = Double.parseDouble(myDate.split("/")[1]));
double YYYY = Double.parseDouble(myDate.split("/")[2]));
答案 2 :(得分:0)
我是一个正则表达的家伙。它在这里也很有帮助,因为你可以在实际做任何事情之前验证你得到了你的预期。
String myDate = "01/02/03";
Matcher matcher = Pattern.compile("(\\d+)/(\\d+)/(\\d+)").matcher(myDate);
if (matcher.find()) {
double month = Double.parseDouble(matcher.group(1));
double day = Double.parseDouble(matcher.group(2));
double year = Double.parseDouble(matcher.group(3));
System.err.println("M: " + month + " D: " + day + " Y: " + year);
} else {
// error handling
}
<强>无论其!!! 强>
您可以使用Joda Time或Java的内部日期/时间支持,并实际解析它并使用格式。这样会更加健壮,也可以让您验证日期实际上是真实,而不仅仅是一组数字。
取决于您的需求。
try {
DateTime parsed = DateTimeFormat.forPattern("MM/dd/yy").parseDateTime(myDate);
double month = parsed.getMonthOfYear();
double day = parsed.getDayOfMonth();
double year = parsed.getYear();
System.err.println("M: " + month + " D: " + day + " Y: " + year);
} catch (DateTimeParseException e) {
// error handling
}
这里的好处还在于您获得两种不同的输出:
M:1.0 D:2.0 Y:3.0
M:1.0 D:2.0 Y:2003.0
请注意,第二个不假设只是一个基本数字,并试图给你一个真实的年份。如果这是一个生产应用程序,我肯定会建议使用实际的日期/时间解析方法,而不仅仅是数字拆分。