【问题标题】:Java get the date X days laterJava获取X天后的日期
【发布时间】:2015-03-22 16:32:52
【问题描述】:

我正在设置一个 db40 数据库,其中填充了我的 Day() 类的实例,其中包含历史上那一天的销售信息,以及一个整数作为其 ID。 id 的格式如下:YYYYMMDD,因此它们都是唯一的。我的数据库按时间顺序设置了正确的数据,但现在我不得不手动编辑 id 以获取超过一年的数据。

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

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

【问题讨论】:

  • 您使用的是哪个版本的 Java?
  • “暴力破解”会带来什么?使用这种固定格式,只有一种解决方案。
  • 暴力强制它添加一个,并在有 30/31/28 天的月份中有一堆 if 语句
  • @JonSkeet java 版本“1.8.0_25”
  • 你不能用Calendar类轻松做到这一点吗?

标签: java date calendar increment


【解决方案1】:

当您使用 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
}

【讨论】:

  • 嗯,我想我明白你在做什么了。谢谢您的帮助。它给了我一个错误,说 * 运算符在 idFromDate() 方法中未定义 Month 和 int
  • @user1765804:抱歉,已解决。
  • 谢谢!你太有帮助了!您的解决方案对于未来来说也很棒,因为我总是可以确保有正确的日期。谢谢老哥!
猜你喜欢
  • 1970-01-01
  • 2018-12-17
  • 2019-04-12
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 2012-12-10
  • 2020-08-24
  • 2022-01-26
相关资源
最近更新 更多