Java:获取当前星期几的价值

时间:2010-03-11 17:10:13

标签: java calendar weekday

目前,我正在创建一个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());
}

2 个答案:

答案 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)

TL;博士

  

如何查找当周的当天

DayOfWeek.from( LocalDate.now() )
  

设定一个星期计划

LocalDate sunday = 
    LocalDate.now()
             .with( TemporalAdjusters.nextOrSame( DayOfWeek.SUNDAY ) ) ;

LocalDate monday = sunday.plusDays( 1 ) ;
LocalDate tuesday = monday.plusDays( 1 ) ;
…

详细

问题和其他答案都使用过时的课程。

旧的日期时间类设计糟糕,令人困惑且麻烦。避免他们。

java.time

在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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore