Java中的每周日历

时间:2013-11-30 22:53:47

标签: java calendar

关于如何在Stack上获得当周的当天这一天有一百万个帖子,而且我已经通过所有这些都无济于事。我正在浏览API,但我仍然没有看到如何做到这一点。

我需要使用Java设置每周日历。因此,如果星期日是29日,星期一将是30日,星期二将是第31或第1,星期三是第1或第2,依此类推。

所以我需要做的是获得一周的第一天(星期日,这对应于Calendar._DAY_OF_WEEK中的1),它是该月的哪一天(Calendar.DAY_OF_MONTH),在接下来的六天里,考虑到新月开始的可能性。

我知道这听起来很简单,但我现在已经在StackOverflow上乱哄哄几个小时了,令人惊讶的是我没有找到这样的东西。

2 个答案:

答案 0 :(得分:2)

这将获得当周的日子。

private Locale locale = Locale.UK;
// 1. create calendar
private Calendar cal = new GregorianCalendar(locale);
private DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, locale);

public void getThisWeeksDays() {
    // 2. set calendar to the current date
    cal.setTime(new Date());
    cal.setFirstDayOfWeek(Calendar.SUNDAY);

    // 3. set calendars dOW field to the first dOW (last sunday)
    cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());

    for (int i = 0; i < 7; i++) {
        // 4. get some infomation
        String nameOfMonth = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, locale);
        String nameOfDay = cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, locale);
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);

        System.out.println(dayOfMonth + ": " + df.format(cal.getTime()));

        // 5. increase day field; add() will adjust the month if neccessary
        cal.add(Calendar.DAY_OF_WEEK, 1);
    }
}

打印出来:

1: Sunday, 1 December 2013
2: Monday, 2 December 2013
3: Tuesday, 3 December 2013
4: Wednesday, 4 December 2013
5: Thursday, 5 December 2013
6: Friday, 6 December 2013
7: Saturday, 7 December 2013

答案 1 :(得分:2)

约达时间

使用Joda-Time 2.3而不是与Java捆绑在一起的臭名昭着的java.util.Date/Calendar类。

我假设您只想要约会,而不考虑时区和时区。

第一周的第一天

此示例假设您希望将一周中的某一天(星期日或星期一等)硬编码为一周的开始和结束。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.


org.joda.time.LocalDate now = new org.joda.time.LocalDate();
org.joda.time.LocalDate monday = now.withDayOfWeek(org.joda.time.DateTimeConstants.MONDAY);
org.joda.time.LocalDate sunday = now.withDayOfWeek(org.joda.time.DateTimeConstants.SUNDAY);

System.out.println("now: " + now);
System.out.println("Monday: " + monday);
System.out.println("Sunday: " + sunday);

跑步时......

now: 2013-11-30
Monday: 2013-11-25
Sunday: 2013-12-01

请注意,不是每个人都在周日开始这一周。美国人星期六倾向于使用星期天,欧洲人和周六的其他人。星期一是国际标准,ISO 8601

我试图找到一种方法来软编码一周的第一天/最后一天,但失败了。以下代码似乎很有希望,但我找不到传递Locale的方法。

org.joda.time.LocalDate today = new org.joda.time.LocalDate();
org.joda.time.LocalDate weekStart = today.dayOfWeek().withMinimumValue();
org.joda.time.LocalDate weekEnd = today.dayOfWeek().withMaximumValue();

一周中的几天

要完成你的问题,请添加一个For()循环,Bob是你的叔叔。

System.out.println( "Week…" );
for ( int x = 0; x < 7; x = x + 1 ) {
    org.joda.time.LocalDate someDate = monday.plusDays( x );
    System.out.println( "Jour: " + someDate.dayOfWeek().getAsText( Locale.FRANCE ) + "  " + someDate.toString() );
}

跑步时......

Week…
Jour: lundi  2013-11-25
Jour: mardi  2013-11-26
Jour: mercredi  2013-11-27
Jour: jeudi  2013-11-28
Jour: vendredi  2013-11-29
Jour: samedi  2013-11-30
Jour: dimanche  2013-12-01