我想使用Java Calendar获取当前周末的日期,有什么快速的方法吗?
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
c.getTime(); // => Date of this coming Saturday.
java.time
类取代了这里看到的麻烦老旧的Calendar
类。 - Basil BourqueCalendar currDate = Calendar.getInstance();;
currDate.add(Calendar.DAY_OF_YEAR, (Calendar.SATURDAY - currDate.get(Calendar.DAY_OF_WEEK) ));
System.out.println("weekend date is in the " + curreDate.get(Calendar.DAY_OF_MONTH));
DAY_OF_XXXXX
非常棒!加一分。 - Adeel Ansarijava.time
类取代了这里看到的麻烦老旧的Calendar
类。 - Basil BourqueLocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) // Today, in specific time zone.
.with( TemporalAdjusters.nextOrSame( DayOfWeek.SATURDAY ) ) // Next Saturday, or today if already Saturday.
.plusDays( 1 ) // Sunday
现代方法使用java.time类来替代麻烦的、设计不良的Date
和Calendar
类。
LocalDate
类表示仅包含日期值而不包含时间和时区的值。
时区对于确定日期非常重要。对于任何给定的时刻,日期因时区而异。例如,在法国巴黎午夜后几分钟是新的一天,而在加拿大魁北克省蒙特利尔仍然是“昨天”。
请以continent/region
的格式指定一个正确的时区名称,例如America/Montreal
、Africa/Casablanca
或Pacific/Auckland
。绝对不要使用诸如EST
或IST
等3-4个字母缩写,因为它们不是真正的时区,没有标准化,甚至不唯一(!)。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
您可以使用TemporalAdjuster
接口的实现从一个日期调整到另一个日期。TemporalAdjusters
类中提供了一些方便的实现,例如nextOrSame
。使用DayOfWeek
enum对象指定星期几。请注意,DayOfWeek
是一个实际的对象,而不仅仅是一个数字或字符串,提供type-safety并确保有效值。
LocalDate saturday = today.with( TemporalAdjusters.nextOrSame( DayOfWeek.SATURDAY ) ) ;
LocalDate sunday = saturday.plusDays( 1 ) ;
如果你想要获取相同或之前的周末,调用previousOrSame
调整器。
java.time 框架是内置于 Java 8 及更高版本中的。这些类取代了麻烦的旧版遗留日期时间类,如java.util.Date
、Calendar
和SimpleDateFormat
。
Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。
想要了解更多,请参阅 Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是 JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。无需字符串,也不需要 java.sql.*
类。
如何获取 java.time 类?
ThreeTen-Extra 项目通过添加额外的类扩展了 java.time。该项目是 java.time 可能未来增加内容的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
和 更多。
试试这个:
String dayNames[]={"lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"};
String nomthNames[]={"janvier","février","mars","avril","mai","juin","juillet","Août","septembre","octobre","novembre","decembre"};
Calendar date = Calendar.getInstance();
String dayName = dayNames[date.get(Calendar.DAY_OF_WEEK)];
String dayMonth = nomthNames[date.get(Calendar.MONTH)];
lblBonjour.setText("<html><b>Bonjour, "+new Functions().getNomPrenom(myID)+"</b><br>"+
"Ajourd'hui "+dayName+" "+date.get(Calendar.DATE)+" "+dayMonth+" "+date.get(Calendar.YEAR)+"<br>"+
"Heure locale: "+date.get(Calendar.HOUR_OF_DAY)+":"+date.get(Calendar.MINUTE) );
Joda时间
new DateTime().withDayOfWeek(DateTimeConstants.SATURDAY)
试试这个。它会给出一周的开始和结束日期。
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, cal.MONTH);
cal.set(Calendar.WEEK_OF_MONTH, cal.WEEK_OF_MONTH);
int weekStart = cal.getFirstDayOfWeek();
cal.set(Calendar.DAY_OF_WEEK,weekStart);
Date WeekStartDate=cal.getTime();
cal.set(Calendar.DAY_OF_WEEK,weekStart+7);
Date WeekEndDate=cal.getTime(