目前,我正在创建一个java计划应用程序,我想知道如何在使用Calendar类获取一周的第一天时找到一周中的当前日期。
以下是我在课堂上使用的方法,用于设置周计划
public static String getSunday() {
SimpleDateFormat d = new SimpleDateFormat(dayDate);
Calendar specific = cal;
specific.add(Calendar.DAY_OF_YEAR, (cal.getFirstDayOfWeek() - ??));
return d.format(specific.getTime());
}
答案 0 :(得分:6)
您可以通过get()
Calendar.DAY_OF_WEEK
来获取当周的当天
public int getTodaysDayOfWeek() {
final Calendar c = Calendar.getInstance();
return c.get(Calendar.DAY_OF_WEEK);
}
另外,虽然我不确定我到底知道你要做什么,但对我来说这看起来很可疑。 (例如cal
是什么?)
答案 1 :(得分:2)
如何查找当周的当天
DayOfWeek.from( LocalDate.now() )
设定一个星期计划
LocalDate sunday =
LocalDate.now()
.with( TemporalAdjusters.nextOrSame( DayOfWeek.SUNDAY ) ) ;
LocalDate monday = sunday.plusDays( 1 ) ;
LocalDate tuesday = monday.plusDays( 1 ) ;
…
问题和其他答案都使用过时的课程。
旧的日期时间类设计糟糕,令人困惑且麻烦。避免他们。
在Java 8及更高版本中,我们使用内置的java.time框架。许多功能都被反向移植到Java 6& 7(ThreeTen-Backport),并进一步适应Android(ThreeTenABP)。
Instant
表示UTC中的当前时刻,分辨率高达纳秒。
Instant instant = Instant.now();
要获得星期几,我们必须确定日期。时区对于确定日期至关重要,因为在任何特定时刻,日期可能在全球范围内变化。例如,巴黎午夜过后几分钟是新的一天,而在蒙特利尔,它仍然是“昨天”。
使用ZoneId
表示时区。以[{1}}格式询问proper time zone name。永远不要使用主流媒体中常见的3-4个字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
continent/region
使用方便的DayOfWeek
枚举来确定星期几。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
您可以询问DayOfWeek dow = DayOfWeek.from( zdt );
对象。
你可以从1到7 ask for a number,其中1是星期一,7是星期日ISO 8601标准。但是不要在代码中传递这个数字;而是传递DayOfWeek
个对象,以享受类型安全和有保证的有效值的好处。
DayOfWeek
您可能需要文字,即星期几的名称。让java.time自动将名称翻译成人类语言。一种Locale
种人类的语言,也规定了使用的文化规范,如如何缩写和大写。 TextStyle
枚举表示您想要的名称。
int dowNumber = dow.getValue();
要获得本周的开始,请询问上周一(或周日,无论如何),或者如果是星期一,请坚持今天。使用Locale locale = Locale.CANADA_FRENCH;
String output = dow.getDisplayName( TextStyle.FULL , locale );
类中的TemporalAdjuster
实现。
TemporalAdjusters
如果您需要日期时间而不是仅限日期,请让java.time获取当天的第一时刻(并非始终是时间LocalDate startOfWeek = zdt.toLocalDate().with( TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY ) );
)。
00:00:00
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。