如何将日期拆分为可用的双打

时间:2016-09-21 17:43:29

标签: java date

我有这段代码,用于查找特定日期的星期几。 (例如: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); 

3 个答案:

答案 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

请注意,第二个不假设只是一个基本数字,并试图给你一个真实的年份。如果这是一个生产应用程序,我肯定会建议使用实际的日期/时间解析方法,而不仅仅是数字拆分。