如何在Java中从月份和年份生成日期?

ant*_*pug 19 java date

我需要为信用卡到期日生成一个新的Date对象,我只有一个月和一年,我怎样才能根据这两个生成一个Date?我需要最简单的方法.我在这里阅读其他一些答案,但它们看起来都太复杂了.

Rei*_*eus 41

你可以使用java.util.Calendar:

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEAR, year);
Date date = calendar.getTime();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,日期字段将设置为今天的日期.如果当前日期超出目标月份的范围,请检查预期的行为.例如,将"calendar"的日期字段设置为30时,将月份设置为2月.在设置月份和年份之前,将日期设置为每个月的已知有效值(例如:1)可能是明智的. (6认同)
  • 另外,请注意月份为"0",即Jan为0而不是1. (3认同)
  • 我不能使用新的日期("2013-05-01")?我有一段时间没用Java编程,但从大多数语言来看,这似乎是一种常识性的方法吗? (2认同)

Prz*_*mek 22

java.time

使用java.timeJava 8内置的框架

import java.time.YearMonth;

int year = 2015;
int month = 12;
YearMonth.of(year,month); // 2015-12
Run Code Online (Sandbox Code Playgroud)

String

YearMonth.parse("2015-12"); // 2015-12
Run Code Online (Sandbox Code Playgroud)

与自定义 DateTimeFormatter

import java.time.format.DateTimeFormatter;

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM yyyy");
YearMonth.parse("12 2015", formatter); // 2015-12
Run Code Online (Sandbox Code Playgroud)

转换 转换YearMonth为更标准的日期表示形式LocalDate.

LocalDate startMonth = date.atDay(1); //2015-12-01
LocalDate endMonth = date.atEndOfMonth(); //2015-12-31
Run Code Online (Sandbox Code Playgroud)


Ray*_*oal 5

自从你提出要求以来,可能是一个非答案java.util.Date,但这似乎是一个很好的机会,可以指出Java中的日期和时间以及日历的大部分工作都应该使用Joda-Time库来完成,在这种情况下

new LocalDate(year, month, 1)
Run Code Online (Sandbox Code Playgroud)

浮现在脑海中.

Joda-Time在这个月的日子里有很多其他的好东西.例如,如果您想知道当月的第一天,您可以写信

LocalDate firstOfThisMonth = new LocalDate().withDayOfMonth(1);
Run Code Online (Sandbox Code Playgroud)

在您的评论中,您询问有关将字符串传递给java.util.Date构造函数的信息,例如:

new Date("2012-09-19")
Run Code Online (Sandbox Code Playgroud)

不推荐使用此版本的构造函数,因此请勿使用它.您应该创建一个日期格式化程序并调用parse.这是一个很好的建议,因为你可能会有yearmonth作为整数值,并且需要制作一个好的字符串,正确填充和分隔以及所有这些,这在所有情况下都难以置信.出于这个原因,使用日期格式化程序,它知道如何完美地处理所有这些东西.

其他早期的答案显示了如何做到这一点.