Android 日历添加日期

Android Calendar add day

我有一个由从数据库中获取的数据填充的字符串数组。 现在,对于数组的每一行,我想在日历中添加一天,今天是“0”行,明天是“1”行,明天之后是“2”行等等。 我创建了这段代码来控制数组中每个元素的位置,但是我如何添加天数呢? 谢谢

Calendar prova = Calendar.getInstance();
        int size = id_op.length;
        for(int i = 0; i< size; i++){                 

        }

您可以只获取以毫秒为单位的时间,然后在其中加上一天的毫秒数。

Calendar prova = Calendar.getInstance();
        int size = id_op.length;
        for(int i = 0; i< size; i++){                 
            Long time = prova.getTimeInMillis();
            time = time + 86400000;
            prova.setTimeInMillis(time);           
        }

tl;博士

new ArrayList<>().add( 
    LocalDate.now().plusDays( 1 ) 
)

java.time

您正在使用麻烦的旧 Calendar class,现在已成为遗留问题,已被定义的 java.time classes 取代在 JSR 310.

LocalDate

LocalDate class 表示没有时间和时区的仅日期值。

时区对于确定日期至关重要。对于任何给定时刻,日期在全球范围内因地区而异。例如,Paris France is a new day while still “yesterday” in Montréal Québec.

午夜后几分钟

如果未指定时区,JVM 将隐式应用其当前默认时区。该默认设置可能随时更改,因此您的结果可能会有所不同。最好明确指定您的 desired/expected 时区作为参数。

指定 proper time zone name in the format of continent/region, such as America/Montreal, Africa/CasablancaPacific/Auckland。切勿使用 ESTIST 等 3-4 字母缩写,因为它们 不是 真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;  
LocalDate today = LocalDate.now( z ) ;

如果你想使用 JVM 当前的默认时区,请求它并作为参数传递。如果省略,则隐式应用 JVM 的当前默认值。最好是明确的。

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

或指定日期。您可以通过数字设置月份,1 月至 12 月的编号为 1-12。

LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.

或者,更好的是,使用 Month enum objects pre-defined, one for each month of the year. Tip: Use these Month objects throughout your codebase rather than a mere integer number to make your code more self-documenting, ensure valid values, and provide type-safety

LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;

List

通常 Java Collections 比原始数组更好用。

您可以选择指定 ArrayList 的初始容量,以避免 ArrayList 在您添加更多项目时调整自身的性能损失。

int initialCapacity = … ; 
List< LocalDate > dates = new ArrayList<>( initialCapacity ) ;

添加您的日期。

dates.add( ld ) ;  // Today, perhaps.
dates.add( ld.plusDays( 1 ) ;  // Tomorrow.
dates.add( ld.plusDays( 2 ) ;  // Day after tomorrow.

或者使用循环。

for( int i = 0 ; i <=10 ; i ++ ) {
    dates.add( ld.plusDays( i ) ) ;
}

关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

Joda-Time project, now in maintenance mode, advises migration to the java.time classes.

要了解更多信息,请参阅 Oracle 教程。并在 Stack Overflow 中搜索许多示例和解释。规格为 JSR 310.

从哪里获得java.time classes?

  • Java SE 8, Java SE 9,及以后
    • 内置。
    • 标准 Java API 的一部分,带有捆绑实施。
    • Java 9 添加了一些小功能和修复。
  • Java SE 6 and Java SE 7
  • Android
    • Android java.time classes.
    • 捆绑实施的更高版本
    • 对于较早的Android,ThreeTenABP project adapts ThreeTen-Backport (mentioned above). See

ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.