如果今天是星期天,则获取下周的日期
Get next week dates if today is Sunday
如果今天是星期日,如何获取下周的日期?我想获取下周周一到周六的日期。
我正在使用以下代码获取日期:
private String[] getDaysOfWeek() {
String[] days = new String[6];
SimpleDateFormat format = new SimpleDateFormat("dd");
Calendar c = GregorianCalendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
for (int i = 0; i < 6; i++) {
if (i == 0) {
days[i] = format.format(c.getTime());
} else {
c.add(Calendar.DATE, 1);
days[i] = format.format(c.getTime());
}
System.out.println("DateTest" + days[i]);
}
return days;
}
当我设置设备 语言英语(美国) 时它工作正常,但如果设备设置为 语言英语,它是 returns 前一周的日期(英国).
我建议您使用 java.time
,现代 Java 日期和时间 API 也称为 JSR-310,用于像这样的重要日期操作。您可以在非全新 Android 设备上执行此操作吗?当然!获取 ThreeTenABP and start coding. This is the Android Backport of JSR-310. There is a thorough explanation in .
private static String[] getDaysOfWeek() {
String[] days = new String[6];
DateTimeFormatter dayOfMonthFormatter = DateTimeFormatter.ofPattern("dd");
LocalDate today = LocalDate.now(ZoneId.of("America/Montreal"));
// go back to Sunday, then forward 1 day to get Monday
LocalDate day = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY))
.plusDays(1);
days[0] = day.format(dayOfMonthFormatter);
for (int i = 1; i < 6; i++) {
day = day.plusDays(1);
days[i] = day.format(dayOfMonthFormatter);
}
return days;
}
今天(蒙特利尔,12 月 10 日,星期日)调用此方法,我得到了下一周的星期几:
[11, 12, 13, 14, 15, 16]
我将 Mac 的区域设置从丹麦(欧洲)更改为美国,结果相同。
由于地球上所有时区的日期永远不会相同,我建议提供明确的时区以获取今天的日期。请在我输入 America/Montreal 的地方替换你想要的时区。我们不能使用设备的时区设置吗?可能是。您可以使用 JVM 的时区设置(这也是您在问题中的代码默认执行的操作)。我建议您也通过将 ZoneId.systemDefault()
指定为时区来在代码中明确说明。 JVM 设置可能会被您程序的其他部分或同一 JVM 中的其他程序 运行 更改,但是,因此不能保证为您提供设备的首选项设置。
学习 java.time
的一个来源是 the Oracle tutorial。您的搜索引擎可以将您指向许多其他引擎。
PS 我曾预计 WeekFields.SUNDAY_START
可能对这项任务有帮助,但我没有找到一个好的方法来使用它。如果有人能发现我遗漏的东西,我将不胜感激。
正确且有用:
- 您应该使用 java.time 类。永远不要使用
Calendar
.
- 使用
TemporalAdjusters.previousOrSame
获取下一个所需的星期几的日期。或者 TemporalAdjusters.nextOrSame
取决于您的业务逻辑,这在您的问题中并不清楚。
来自 LocalDate::datesUntil
的流
如果你想要花哨一些,你可以使用 Java 9 及更高版本中添加的 LocalDate.datesUntil
方法将 Answer 中的 for
循环替换为 Stream。
今天获取,下周一获取。
LocalDate today = LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) ;
LocalDate nextOrSameMonday = today.with( TemporalAdjusters.nextOrSame( DayOfWeek.MONDAY ) ) ;
制作那一周的日期流。
Stream<LocalDate> stream = nextOrSameMonday.datesUntil( nextOrSameMonday.plusWeeks( 1 ) ) ;
将流收集到 List
。
List< LocalDate > dates = stream.collect( Collectors.toList() ) ;
转储到控制台。
System.out.println( dates ) ;
[2019-04-08, 2019-04-09, 2019-04-10, 2019-04-11, 2019-04-12, 2019-04-13, 2019-04-14]
如果您只想要天数:
for ( LocalDate date : dates )
{
System.out.println( date.getDayOfMonth() );
}
或更改流处理以收集整数列表、月份中的第几天。
如果今天是星期日,如何获取下周的日期?我想获取下周周一到周六的日期。
我正在使用以下代码获取日期:
private String[] getDaysOfWeek() {
String[] days = new String[6];
SimpleDateFormat format = new SimpleDateFormat("dd");
Calendar c = GregorianCalendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
for (int i = 0; i < 6; i++) {
if (i == 0) {
days[i] = format.format(c.getTime());
} else {
c.add(Calendar.DATE, 1);
days[i] = format.format(c.getTime());
}
System.out.println("DateTest" + days[i]);
}
return days;
}
当我设置设备 语言英语(美国) 时它工作正常,但如果设备设置为 语言英语,它是 returns 前一周的日期(英国).
我建议您使用 java.time
,现代 Java 日期和时间 API 也称为 JSR-310,用于像这样的重要日期操作。您可以在非全新 Android 设备上执行此操作吗?当然!获取 ThreeTenABP and start coding. This is the Android Backport of JSR-310. There is a thorough explanation in
private static String[] getDaysOfWeek() {
String[] days = new String[6];
DateTimeFormatter dayOfMonthFormatter = DateTimeFormatter.ofPattern("dd");
LocalDate today = LocalDate.now(ZoneId.of("America/Montreal"));
// go back to Sunday, then forward 1 day to get Monday
LocalDate day = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY))
.plusDays(1);
days[0] = day.format(dayOfMonthFormatter);
for (int i = 1; i < 6; i++) {
day = day.plusDays(1);
days[i] = day.format(dayOfMonthFormatter);
}
return days;
}
今天(蒙特利尔,12 月 10 日,星期日)调用此方法,我得到了下一周的星期几:
[11, 12, 13, 14, 15, 16]
我将 Mac 的区域设置从丹麦(欧洲)更改为美国,结果相同。
由于地球上所有时区的日期永远不会相同,我建议提供明确的时区以获取今天的日期。请在我输入 America/Montreal 的地方替换你想要的时区。我们不能使用设备的时区设置吗?可能是。您可以使用 JVM 的时区设置(这也是您在问题中的代码默认执行的操作)。我建议您也通过将 ZoneId.systemDefault()
指定为时区来在代码中明确说明。 JVM 设置可能会被您程序的其他部分或同一 JVM 中的其他程序 运行 更改,但是,因此不能保证为您提供设备的首选项设置。
学习 java.time
的一个来源是 the Oracle tutorial。您的搜索引擎可以将您指向许多其他引擎。
PS 我曾预计 WeekFields.SUNDAY_START
可能对这项任务有帮助,但我没有找到一个好的方法来使用它。如果有人能发现我遗漏的东西,我将不胜感激。
- 您应该使用 java.time 类。永远不要使用
Calendar
. - 使用
TemporalAdjusters.previousOrSame
获取下一个所需的星期几的日期。或者TemporalAdjusters.nextOrSame
取决于您的业务逻辑,这在您的问题中并不清楚。
来自 LocalDate::datesUntil
的流
如果你想要花哨一些,你可以使用 Java 9 及更高版本中添加的 LocalDate.datesUntil
方法将 Answer 中的 for
循环替换为 Stream。
今天获取,下周一获取。
LocalDate today = LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) ;
LocalDate nextOrSameMonday = today.with( TemporalAdjusters.nextOrSame( DayOfWeek.MONDAY ) ) ;
制作那一周的日期流。
Stream<LocalDate> stream = nextOrSameMonday.datesUntil( nextOrSameMonday.plusWeeks( 1 ) ) ;
将流收集到 List
。
List< LocalDate > dates = stream.collect( Collectors.toList() ) ;
转储到控制台。
System.out.println( dates ) ;
[2019-04-08, 2019-04-09, 2019-04-10, 2019-04-11, 2019-04-12, 2019-04-13, 2019-04-14]
如果您只想要天数:
for ( LocalDate date : dates )
{
System.out.println( date.getDayOfMonth() );
}
或更改流处理以收集整数列表、月份中的第几天。