java日历-获取一周的最后5天(无周末)
我正在处理一些问题 我需要从数据库中获取一些数据 1) 从最后5天中获取5条记录(每天一条记录),但这些天必须是一周中的几天(现在是周末) 2) 从当月获取20条记录(当前或过去,每天一条记录) 我正在努力使用Java日历,但仍然不知道如何获取日期 有人能帮我吗 只是一个开始java日历-获取一周的最后5天(无周末),java,calendar,Java,Calendar,我正在处理一些问题 我需要从数据库中获取一些数据 1) 从最后5天中获取5条记录(每天一条记录),但这些天必须是一周中的几天(现在是周末) 2) 从当月获取20条记录(当前或过去,每天一条记录) 我正在努力使用Java日历,但仍然不知道如何获取日期 有人能帮我吗 只是一个开始 Calendar cal = Calendar.getInstance();//initilized with current date & time Date date = cal.getTime();//ret
Calendar cal = Calendar.getInstance();//initilized with current date & time
Date date = cal.getTime();//returned the current date & time that cal holds
boolean isMonday = Calendar.MONDAY == cal.get(Calendar.DAY_OF_WEEK);//it will return an integer
只是一个开始
Calendar cal = Calendar.getInstance();//initilized with current date & time
Date date = cal.getTime();//returned the current date & time that cal holds
boolean isMonday = Calendar.MONDAY == cal.get(Calendar.DAY_OF_WEEK);//it will return an integer
应该可以:
private Calendar workingDaysBack(final Calendar from, final int count) {
for (int daysBack = 0; daysBack < count; ++daysBack) {
do {
from.add(Calendar.DAY_OF_YEAR, -1);
} while(isWeekend(from));
}
return from;
}
private boolean isWeekend(Calendar cal) {
return cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY ||
cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY;
}
private Calendar workingDaysBack(最终日历开始,最终整数计数){
对于(int daysBack=0;daysBack
应该可以:
private Calendar workingDaysBack(final Calendar from, final int count) {
for (int daysBack = 0; daysBack < count; ++daysBack) {
do {
from.add(Calendar.DAY_OF_YEAR, -1);
} while(isWeekend(from));
}
return from;
}
private boolean isWeekend(Calendar cal) {
return cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY ||
cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY;
}
private Calendar workingDaysBack(最终日历开始,最终整数计数){
对于(int daysBack=0;daysBack <代码> > P>你可以通过在你想考虑的每一天中调整星期的参数来完成第一部分。取决于您希望在几周内跑步时的行为-应该是当前一周,还是最后一个完整的一周?这里我假设本周
Calendar cal = Calendar.getInstance();
List<Date> last5Days = new LinkedList<Date>();
List<Integer> weekDays = Arrays.asList(Calendar.MONDAY,
Calendar.TUESDAY, Calendar.WEDNESDAY, Calendar.THURSDAY,
Calendar.FRIDAY);
for (int weekDay : weekDays) {
cal.set(Calendar.DAY_OF_WEEK, weekDay);
last5Days.add(cal.getTime());
}
System.out.println(last5Days);
Calendar cal=Calendar.getInstance();
List last5Days=新建LinkedList();
List weekDays=Arrays.asList(Calendar.MONDAY,
日历。星期二,日历。星期三,日历。星期四,
日历(星期五);
对于(int工作日:工作日){
校准设置(日历日/周/日、工作日);
last5Days.add(cal.getTime());
}
系统输出打印(最近5天);
自当月起20周。取决于您希望在几周内而不是跨越月份边界的行为。在这里,我已经前进到第一个星期一,然后从那里继续
List<Date> last20Days = new LinkedList<Date>();
// find first Monday in the month
for (int i = 1; i <= 31; i++) {
cal.set(Calendar.DAY_OF_MONTH, i);
if (cal.get(Calendar.DAY_OF_WEEK) == weekDays.get(0)) {
break;
}
}
for (int i = 1; i <= 31; i++) {
if (last20Days.size() == 20) {
break;
}
if (weekDays.contains(cal.get(Calendar.DAY_OF_WEEK))) {
last20Days.add(cal.getTime());
}
cal.add(Calendar.DAY_OF_MONTH, 1);
}
System.out.println(last20Days);
List last20Days=newlinkedlist();
//找到本月的第一个星期一
对于(int i=1;i),你可以通过调整你想考虑的每一天的周数来做第一部分。取决于你想在周内运行的行为应该是当前的一周还是最后一周?这里我假设了当前的一周……/P>
Calendar cal = Calendar.getInstance();
List<Date> last5Days = new LinkedList<Date>();
List<Integer> weekDays = Arrays.asList(Calendar.MONDAY,
Calendar.TUESDAY, Calendar.WEDNESDAY, Calendar.THURSDAY,
Calendar.FRIDAY);
for (int weekDay : weekDays) {
cal.set(Calendar.DAY_OF_WEEK, weekDay);
last5Days.add(cal.getTime());
}
System.out.println(last5Days);
Calendar cal=Calendar.getInstance();
List last5Days=新建LinkedList();
List weekDays=Arrays.asList(Calendar.MONDAY,
日历。星期二,日历。星期三,日历。星期四,
日历(星期五);
对于(int工作日:工作日){
校准设置(日历日/周/日、工作日);
last5Days.add(cal.getTime());
}
系统输出打印(最近5天);
从当前月份开始的20个星期天。这取决于您希望在几周内有什么行为,而不是跨越月份边界。这里我将前进到第一个星期一,然后从那里添加
List<Date> last20Days = new LinkedList<Date>();
// find first Monday in the month
for (int i = 1; i <= 31; i++) {
cal.set(Calendar.DAY_OF_MONTH, i);
if (cal.get(Calendar.DAY_OF_WEEK) == weekDays.get(0)) {
break;
}
}
for (int i = 1; i <= 31; i++) {
if (last20Days.size() == 20) {
break;
}
if (weekDays.contains(cal.get(Calendar.DAY_OF_WEEK))) {
last20Days.add(cal.getTime());
}
cal.add(Calendar.DAY_OF_MONTH, 1);
}
System.out.println(last20Days);
List last20Days=newlinkedlist();
//找到本月的第一个星期一
太长了,读不下去了(int i=1;
使用java.time
其他答案使用了麻烦的旧日期时间类,如Calendar
,而不是现在的遗留类,被java.time类取代
要获得最后五天,你首先需要获得“今天”
LocalDate
该类表示一个仅限日期的值,不包含一天中的时间和时区
时区对于确定日期至关重要。对于任何给定的时刻,全球各地的日期都因区域而异。例如,年午夜后几分钟是新的一天,而年仍然是“昨天”
请以大陆/地区
的格式指定一个,例如,或太平洋/奥克兰
。切勿使用3-4个字母的缩写,例如EST
或IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)
DayOfWeek
要获取以前的日期,可以调用minusDays
以增量方式移动过去的日期
LocalDate yesterday = today.minusDays( 1 );
LocalDate dayBeforeYesterday = yesterday.minusDays( 1 );
您可以使用DayOfWeek
enum测试每个LocalDate
对象的星期几。该类预定义了七个对象,一周中的每一天一个。请注意,这些对象是真实对象,而不仅仅是字符串。这里根本不需要使用字符串
Boolean isSaturday = myLocalDate.getDayOfWeek().equals( DayOfWeek.SATURDAY );
Boolean isSunday = myLocalDate.getDayOfWeek().equals( DayOfWeek.SUNDAY );
EnumSet
进行比较的一种更巧妙、更灵活的方法是使用,这是一种针对枚举优化的实现,执行速度非常快,占用的内存非常少
EnumSet<DayOfWeek> weekend = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY );
三十个额外的TemporalAdjuster
previousWorkingDay()
该项目使用附加功能扩展了java.time类
此调整器硬编码为跳过星期六和星期日。如果希望考虑星期几的其他值,可以编写自己的TemporalAdjuster
实现
java.time类使用不可变对象。因此,我们不改变对象上的值(“mutate”),而是基于原始值生成一个新的对象。因此,在这里我们调用,传递一个TemporalAdjuster
,并生成一个新的LocalDate
,该对象在跳过周六/周日时表示先前的日期
LocalDate previousWorkingDay =
myLocalDate.with(
org.threeten.extra.Temporals.previousWorkingDay()
)
;
完整示例
让我们把这些都放在一起
ZoneId z = ZoneId.of ( "America/Montreal" );
LocalDate today = LocalDate.now ( z );
Integer countDaysPrior = 5;
List<LocalDate> priorWeekdays = new ArrayList<> ( countDaysPrior ); // Set initial capacity to number of days to be collected.
LocalDate localDate = today; // Initialize to today. Exclusive, we want only prior days.
for ( int i = 1 ; i <= countDaysPrior ; i ++ ) {
localDate = localDate.with ( org.threeten.extra.Temporals.previousWorkingDay () ); // Decrement each day into the past, skipping over Saturday/Sunday.
priorWeekdays.add ( localDate );
}
System.out.println ( "Weekdays prior to " + today + " are: " + priorWeekdays );
ZoneId z=ZoneId.of(“美国/蒙特利尔”);
LocalDate today=LocalDate.now(z);
整数countDaysPrior=5;
List prior weekdays=new ArrayList(countDaysPrior);//将初始容量设置为要收集的天数。
LocalDate LocalDate=today;//初始化为today.Exclusive,我们只需要前几天。
太长了,读不下去了(int i=1;
使用java.time
其他答案使用了麻烦的旧日期时间类,例如Calendar
,而不是现在的遗留类,被java.time c取代