我在 * SO * 上发现了一些类似的问题,但还没有找到解决方案。
今天的Date
如下所示:(假设它为Date1,其值为2012-06-22
)
Calendar cal = Calendar.getInstance();
SimpleDateFormat dateformatter = new SimpleDateFormat("yyyy-MM-dd");
Date start = cal.getTime();
String currentDate=dateformatter.format(start);
我从用户那里检索4个值:
- 特定日期(假设
5
) - 特定月份(假设
1
) - 特定年份(假设
2012
) - 天数(假设
7
)
因此,这个日期,比如说Date2变为2012-01-05
(* yyyy-MM-dd *),同时天数设置为7
。
我想比较日期1和日期2-天数。
我知道通过使用下面的代码段,可以从日历示例中减去特定的天数。
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -7);
但是由于我有String
形式的Date2,所以我不能遵循这种方法。
任何帮助都感激不尽。
编辑:
根据您的建议,我将能够使用SimpleDateFormat
的parse
方法将String
转换为Date
。
现在我有2个Date
对象。
- 如何找出它们之间在
days
、months
和years
方面的差异? - 如何从特定日期(例如
2012-01-05
)中减去特定天数(例如7
)?
5条答案
按热度按时间9rygscc11#
使用
SimpleDateFormat
将String
(表示日期)转换为Date
例如:
q9yhzks02#
如果你可以用Joda Time来代替
Date
/Calendar
,那就这么做吧,这会让你的生活更轻松。如果没有,听起来就像您不想 * 格式化 * 当前日期-相反,您想 * 解析 * 来自用户的
Date2
:然后,您可以 * 或者 * 创建一个日历并减去特定的天数,或者(如果您谈论的是经过的时间-您需要考虑您在DST转换和时区周围的行为)您可以从
date2.getTime()
中减去7 * 24 * 60 * 60 * 1000毫秒。从根本上说,应该尽早将 out 从字符串格式转换出来,并且只在确实需要时才将 * 转换为 * 字符串格式--当然不是为了比较。这种数据的自然表示形式是
Date
或Calendar
(假设您坚持使用JDK),因此请努力将数据转换为这种表示形式。你有几个真正的“业务”问题要考虑虽然:
你应该在实现你的代码之前回答所有这些问题,因为这会影响你使用的表示。同样,在开始实现之前,为你能想到的所有东西编写单元测试。
z2acfund3#
据我所知,你现在有两个日期,你想从日期中减去特定的天数。
首先,可以使用
SimpleDateFormat
将日期转换为字符串,将字符串转换为日期现在减去天数,比如说7。你可以得到日期的时间,然后从中减去72460601000
tyg4sfes4#
我认为你可以利用java提供的比较器来比较和排序日期。这里是link
希望你能得到你想要的。
wnavrhmk5#
Java.时间
问题和公认的答案使用了
java.util
日期-时间API及其解析/格式化APISimpleDateFormat
,这在2012年使用标准库是合适的。2014年3月,Java 8引入了modern Date-Time API,取代了传统API,从那时起,强烈建议使用现代日期-时间API。此外,下面引用的是home page of Joda-Time的一则通知:
请注意,从Java SE 8开始,用户需要迁移到
java.time
(JSR-310)-JDK的核心部分,它将取代此项目。从您的问题中复制的要求:
根据您的建议,我将能够使用
SimpleDateFormat
的解析方法将String
转换为Date
。现在我有2个
Date
对象。days
、months
和years
方面的差异?2012-01-05
)中减去特定的天数(比如7
)?使用
java.time
(现代日期-时间API)的解决方案:使用
java.time
,您可以将日期字符串解析为LocalDate
,然后查找此日期和当前日期之间的Period
(通过LocalDate.now()
获得)。您还可以减去日、月和年使用类似minusXxx
/minus
的方法。您有类似的方法(plusXxx
/plus
)来添加这些单位。请查看the documentation ofLocalDate
以了解更多信息。注意:
java.time
API基于ISO 8601,因此您不需要DateTimeFormatter
来解析已经是ISO 8601格式的日期-时间字符串(例如您的日期-时间字符串2012-06-22
)。演示:
示例运行的输出:
ONLINE DEMO
从**Trail: Date Time**了解有关现代日期-时间API的更多信息。