关于如何在Stack上获得当周的当天这一天有一百万个帖子,而且我已经通过所有这些都无济于事。我正在浏览API,但我仍然没有看到如何做到这一点。
我需要使用Java设置每周日历。因此,如果星期日是29日,星期一将是30日,星期二将是第31或第1,星期三是第1或第2,依此类推。
所以我需要做的是获得一周的第一天(星期日,这对应于Calendar._DAY_OF_WEEK
中的1),它是该月的哪一天(Calendar.DAY_OF_MONTH
),在接下来的六天里,考虑到新月开始的可能性。
我知道这听起来很简单,但我现在已经在StackOverflow上乱哄哄几个小时了,令人惊讶的是我没有找到这样的东西。
答案 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