我想使用Calendar和Date获取java中一周的第一个日期,输入为:: 1.本月的周数 2个月 3.年
Calendar cal = Calendar.getInstance();
int weekOfMonth = Calendar.WEEK_OF_MONTH;
System.out.println("weekOfMonth : " + weekOfMonth);
在此之后我不知道继续。
答案 0 :(得分:2)
Calendar类中有一个方法getFirstDayOfWeek(),它将返回0表示星期日,1表示星期一等等。以下代码片段基于此,它将为您提供一周中的第一个日期。 / p>
private static Date getFirstDateOfWeek(){
Calendar cal = Calendar.getInstance();
Date d = Calendar.getInstance().getTime();
int currDay = d.getDay(); // getting the current day
int startDay = (currDay - cal.getFirstDayOfWeek()) + 1; // calculate the difference of number days to the current date from the first day of week
d.setDate(d.getDate() - startDay); // setting the date accordingly.
return d;
}
希望这会对你有所帮助。
答案 1 :(得分:0)
int year = 2012;
int month = 3 //for April(they start from 0 = January)
int week = 2;
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEEK_OF_MONTH, week);
Date date = calendar.getTime();
答案 2 :(得分:0)
首先,您可以使用YearMonth
类来表示年份和月份。
YearMonth ym = YearMonth.of( 2017 , Month.FEBRUARY );
至于每周,您必须定义条款。你的意思是包含本月第一天的一周吗?或者你是指那个月的所有七天的第一周?或者你的意思是第一周与某一天的某一天?
如果您想要本月的第一天,请询问YearMonth
。
LocalDate firstOfMonth = ym.atDay( 1 );
要获取包含第一个月日期的一周的开头,请使用TemporalAdjuster
(注释复数名称)类中的TemporalAdjusters
。
LocalDate previousOrSameMondayOfFirstOfMonth =
firstOfMonth.with( TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY ) ) ;
如果您指的是包含特定星期几第一次出现的一周,请使用另一个TemporalAdjuster
。
LocalDate firstMondayOfMonth =
firstOfMonth.with( TemporalAdjusters.firstInMonth( DayOfWeek.MONDAY ) );
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。