【问题标题】:subtracting two days from current date without using calender从当前日期减去两天而不使用日历
【发布时间】:2017-10-05 17:28:49
【问题描述】:

我可以打印当前日期 如何使用日期对象从当前日期减去 2 天。无论本网站之前提出的问题与我的要求不匹配。如果我使用日历,那么我会得到不同格式的日期。我只想通过使用日期对象来使用 yyyyMMdd 中的日期格式。我试过了,但我收到了类似的错误 操作符 - 未定义参数类型 String, int。 帮我解决这个问题。

Date date = new Date();
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
System.out.println("date is "+dateFormat.format(date));
Date dateBefore = new Date(dateFormat.format(date)) - (2 * 24 * 3600 * 1000));

【问题讨论】:

  • 您可以使用Calendar 来完成,只需按照here 的说明计算差值,然后调用dateFormat.format(calendar.getTime())
  • @Hugo ,我写了这样的代码 Date date = new Date(); DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");日历 cal = Calendar.getInstance(); //cal.setTime(dateInstance); cal.add(日历.DATE,-2);日期 dateBefore2Days = dateFormat.format(cal.getTime());
  • @Hugo,我收到错误,例如类型不匹配无法从字符串转换为日期
  • dateFormat.format() 返回 String,而不是 Date。你应该做dateBefore2Days = cal.getTime()。然后,如果要将Date 格式化为String,则调用dateFormat.format(dateBefore2Days)DateString 是不同的东西。 Datehas no format,而format() 方法返回的String表示特定格式的日期。

标签: java date


【解决方案1】:

你可能想看看 Joda-time。在 Java 中处理日期要容易得多。

DateTime dateTime = new DateTime(date);
dateTime = dateTime.minusDays(2);

Joda-time 的格式如下:example

编辑: 根据定义,dateFormat.format(date)) 返回一个字符串。因此,您得到的编译错误 - 无法从字符串中扣除 int。这就是我建议熟悉 Joda-time 的原因

【讨论】:

  • 虽然是一个很棒的 AP​​I(我用了很多,而且非常喜欢它),但 Joda-Time 处于维护模式,正在被新的 API 取代,所以我不建议开始一个新项目用它。即使在joda's website 中,它也说:“请注意,Joda-Time 被认为是一个基本上“完成”的项目。没有计划进行重大改进。如果使用 Java SE 8,请迁移到 java.time (JSR-310 )。”。在 Java 8 中,有 new java.time API,在 JDK 6 和 7 中,有 ThreeTen Backport
【解决方案2】:

使用date.getTime() 代替dateFormat.format(date)

 Date dateBefore = new Date(date.getTime() - (2 * 24 * 3600 * 1000));

【讨论】:

  • @usha 如果这解决了您的问题,请单击旁边的复选标记将其标记为正确答案。谢谢!
猜你喜欢
  • 2012-04-29
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
相关资源
最近更新 更多