我需要为信用卡到期日生成一个新的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)
Prz*_*mek 22
使用java.time
Java 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)
自从你提出要求以来,可能是一个非答案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
.这是一个很好的建议,因为你可能会有year
和month
作为整数值,并且需要制作一个好的字符串,正确填充和分隔以及所有这些,这在所有情况下都难以置信.出于这个原因,使用日期格式化程序,它知道如何完美地处理所有这些东西.
其他早期的答案显示了如何做到这一点.