Java获取X天后的日期

问题描述 投票:0回答:2

我正在设置一个 db40 数据库,它充满了我的 Day() 类的实例,它具有历史记录中当天的销售信息,以及其 ID 的整数。 id 的格式如下:YYYYMMDD,因此它们都是唯一的。我的数据库按时间顺序设置了正确的数据,但现在我被迫手动编辑 id,以获取一年多的数据。

问题:假设第 1 天是 2014 年 1 月 1 日,其格式为:20140101,如何正确地将日期每次增加一天?之后我需要计算 424 个日期,但我想不出一个不暴力破解的聪明解决方案。

所以理想情况下,我想要这样的 getDate(ThisDate+1 Day)

java date calendar increment
2个回答
2
投票

当您使用 Java 8 时,我将使用

java.time
来实现此目的:

  • 将整数 (ick) 转换为
    LocalDate
  • 添加任意天数
  • 转换回整数(ick)

所以类似:

static LocalDate dateFromId(int id) {
    int year = id / 10000;
    int month = (id / 100) % 100;
    int day = id % 100;
    return LocalDate.of(year, month, day);
}

static int idFromDate(LocalDate date) {
    return date.getYear * 10000
        + date.getMonthValue() * 100 
        + date.getDayOfMonth();
}

static int advanceId(int id, int days) {
    LocalDate original = dateFromId(id);
    LocalDate advanced = original.plusDays(days);
    return idFromDate(advanced);
}

或者计算其中的一堆:

LocalDate original = dateFromId(id);
for (int i = 1; i <= count; i++) {
    LocalDate advanced = original.plusDays(i);
    int advancedId = idFromDate(advanced);
    // Use advanced
}

0
投票

乔恩·斯基特的回答当然很好。但我会通过使用文本来更简单地做到这一点,假设我们在当代总是有 4 位数的年份(年份中没有前导零)。

为了清楚起见,我们将 2014 年 1 月 23 日的示例数据更改为

20140123

int
➡️
LocalDate

要从

int
LocalDate
,请将数字转换为字符串。然后通过
LocalDate
解析。

我们可以使用预定义的格式化程序

DateTimeFormatter.BASIC_ISO_DATE
,因为您的 int-as-text 符合 ISO 8601 标准的“基本”格式,省略了连字符分隔符。

LocalDate myLocalDate = LocalDate.parse ( Integer.toString( 20140123 ) , DateTimeFormatter.BASIC_ISO_DATE ) ;

使用断线语法:

LocalDate myLocalDate = 
    LocalDate
    .parse 
    ( 
        Integer.toString( 20140123 ) , 
        DateTimeFormatter.BASIC_ISO_DATE 
    ) 
;

LocalDate
➡️
int

转向另一个方向,从

LocalDate
int
数字,生成文本来表示
LocalDate
对象的值。然后将该文本解析为
int
数字。

int num = Integer.parseInt ( myLocalDate.format( DateTimeFormatter.BASIC_ISO_DATE ) ) ;

使用断线语法:

int num = 
    Integer
    .parseInt 
    ( 
        myLocalDate.format( DateTimeFormatter.BASIC_ISO_DATE ) 
    ) 
;
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.