Java 如果今天是星期天,就安排下周的约会

Java 如果今天是星期天,就安排下周的约会,java,android,date,weekday,java.util.calendar,Java,Android,Date,Weekday,Java.util.calendar,如果今天是周日,如何安排下周的约会?我想知道下星期星期一到星期六的日期 我正在使用以下代码获取日期: private String[] getDaysOfWeek() { String[] days = new String[6]; SimpleDateFormat format = new SimpleDateFormat("dd"); Calendar c = GregorianCalendar.getInstance(); c.set(Calendar.DA

如果今天是周日,如何安排下周的约会?我想知道下星期星期一到星期六的日期

我正在使用以下代码获取日期:

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;
}
private字符串[]getDaysOfWeek(){
字符串[]天=新字符串[6];
SimpleDataFormat格式=新的SimpleDataFormat(“dd”);
Calendar c=gregorianalendar.getInstance();
c、 设置(Calendar.DAY\u OF_WEEK,Calendar.MONDAY);
对于(int i=0;i<6;i++){
如果(i==0){
天[i]=format.format(c.getTime());
}否则{
c、 添加(日历日期,1);
天[i]=format.format(c.getTime());
}
系统输出打印项次(“日期测试”+天[i]);
}
返程天数;
}

当我设置设备语言英语(美国)时,它可以正常工作,但是如果设备设置为语言英语(英国),它会返回上一周的日期。我建议您使用
java.time
,现代java日期和时间API,也被称为JSR-310,用于像这样的非平凡日期操作。你能在非全新的安卓设备上做到这一点吗?当然!获取并开始编码。这是JSR-310的Android后端口。书中有详尽的解释

我把Mac电脑的区域设置从丹麦(欧洲)改为美国,得到了同样的结果

由于地球上所有时区的日期都不相同,因此我建议为获取今天的日期提供明确的时区。请将我放置在美国/蒙特利尔的时区替换为您想要的时区。我们不能使用设备的时区设置吗?大概您可以使用JVM的时区设置(这也是问题中的代码默认做的)。我建议您通过将
ZoneId.systemDefault()
指定为时区,在代码中也明确这一点。JVM设置可能会被程序的其他部分或在同一JVM中运行的其他程序更改,因此不能保证为您提供设备的首选项设置

学习
java.time
的一个来源是。你的搜索引擎可以让你找到很多其他人


PS我原以为
WeekFields.SUNDAY\u START
可能对这项任务有帮助,但我没有找到一个好方法来使用它。如果有人能发现我遗漏了什么,我将非常感谢您的提示。

我建议您使用
java.time
,现代java日期和时间API,也称为JSR-310,用于像这样的非平凡日期操作。你能在非全新的安卓设备上做到这一点吗?当然!获取并开始编码。这是JSR-310的Android后端口。书中有详尽的解释

我把Mac电脑的区域设置从丹麦(欧洲)改为美国,得到了同样的结果

由于地球上所有时区的日期都不相同,因此我建议为获取今天的日期提供明确的时区。请将我放置在美国/蒙特利尔的时区替换为您想要的时区。我们不能使用设备的时区设置吗?大概您可以使用JVM的时区设置(这也是问题中的代码默认做的)。我建议您通过将
ZoneId.systemDefault()
指定为时区,在代码中也明确这一点。JVM设置可能会被程序的其他部分或在同一JVM中运行的其他程序更改,因此不能保证为您提供设备的首选项设置

学习
java.time
的一个来源是。你的搜索引擎可以让你找到很多其他人

PS我原以为
WeekFields.SUNDAY\u START
可能对这项任务有帮助,但我没有找到一个好方法来使用它。如果有人能发现我遗漏了什么,我将非常感谢你的提示。

正确且有用:

  • 您应该使用java.time类。切勿使用
    日历
  • 使用
    TemporalAdjusters.previousorname
    获取一周中所需下一天的日期。或者取决于您的业务逻辑,这在您的问题中并不清楚
来自
LocalDate::datesUntil的流
如果您想玩得更开心,可以使用Java 9及更高版本中添加的
LocalDate.datesUntil
方法,将答案中的
for
循环替换为流

今天开始,下周一开始

LocalDate today = LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) ;
LocalDate nextOrSameMonday = today.with( TemporalAdjusters.nextOrSame( DayOfWeek.MONDAY ) ) ;
把那个星期的日期连成一行

Stream<LocalDate> stream = nextOrSameMonday.datesUntil( nextOrSameMonday.plusWeeks( 1 ) ) ;
转储到控制台

System.out.println( dates ) ;
[2019-04-082019-04-092019-04-1012019-04-1122019-04-1212019-04-132019-04-14]

如果您只需要天数:

for ( LocalDate date : dates )
{
    System.out.println( date.getDayOfMonth() );
}
或者更改流处理以收集整数列表,即月日数。

正确且有用:

  • 您应该使用java.time类。切勿使用
    日历
  • 使用
    TemporalAdjusters.previousorname
    获取一周中所需下一天的日期。或者取决于您的业务逻辑,这在您的问题中并不清楚
来自
LocalDate::datesUntil的流
如果您想玩得更开心,可以使用Java 9及更高版本中添加的
LocalDate.datesUntil
方法,将答案中的
for
循环替换为流

今天开始,下周一开始

LocalDate today = LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) ;
LocalDate nextOrSameMonday = today.with( TemporalAdjusters.nextOrSame( DayOfWeek.MONDAY ) ) ;
把那个星期的日期连成一行

Stream<LocalDate> stream = nextOrSameMonday.datesUntil( nextOrSameMonday.plusWeeks( 1 ) ) ;
转储到控制台

System.out.println( dates ) ;
[2019-04-082019-04-092019-04-1012019-04-1122019-04-1212019-04-132019-04-14]

如果您只需要天数:

for ( LocalDate date : dates )
{
    System.out.println( date.getDayOfMonth() );
}

或者更改流处理以收集整数列表,即月份的日期。

在美国,星期天是一周的第一天。在英国,星期一是一天。有人可能会怀疑这会以某种方式导致不同的结果
然后是(int i=1;…)
,循环中不需要
if
-
else
语句。我是否正确理解,无论当前值是多少