fms*_*msf 171 java calendar subtraction
有人知道使用Java日历从日期中减去X天的简单方法吗?
我无法找到任何允许我直接从Java中的日期减去X天的函数.有人能指出我正确的方向吗?
Ans*_*ith 295
取自这里的文档:
根据日历的规则,将指定的时间量添加或减去给定的日历字段.例如,要从日历的当前时间减去5天,您可以通过调用以下内容来实现:
Run Code Online (Sandbox Code Playgroud)Calendar calendar = Calendar.getInstance(); // this would default to now calendar.add(Calendar.DAY_OF_MONTH, -5).
Eli*_*ght 38
您可以使用该add方法并将其传递给负数.但是,您也可以编写一个不使用Calendar类的简单方法,如下所示
public static void addDays(Date d, int days)
{
d.setTime( d.getTime() + (long)days*1000*60*60*24 );
}
Run Code Online (Sandbox Code Playgroud)
这将获取日期的时间戳值(自纪元以来的毫秒数)并添加适当的毫秒数.您可以为days参数传递负整数以进行减法.这比"适当的"日历解决方案简单:
public static void addDays(Date d, int days)
{
Calendar c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.DATE, days);
d.setTime( c.getTime().getTime() );
}
Run Code Online (Sandbox Code Playgroud)
请注意,这两个解决方案都会更改Date作为参数传递的对象,而不是返回全新的对象Date.如果需要,可以很容易地改变其中任何一种功能.
Mik*_*eck 35
Anson的答案适用于简单的情况,但是如果你要进行更复杂的日期计算,我建议你查看Joda Time.它会让你的生活更轻松.
在Joda时间你可以做的
DateTime dt = new DateTime();
DateTime fiveDaysEarlier = dt.minusDays(5);
Run Code Online (Sandbox Code Playgroud)
Bas*_*que 13
LocalDate.now().minusDays( 10 )
Run Code Online (Sandbox Code Playgroud)
最好指定时区.
LocalDate.now( ZoneId.of( "America/Montreal" ) ).minusDays( 10 )
Run Code Online (Sandbox Code Playgroud)
与早期版本的Java捆绑在一起的旧日期时间类(例如java.util.Date/ .Calendar)已被证明是麻烦,混乱和有缺陷的.避免他们.
Java 8及更高版本使用新的java.time框架取代了那些旧类.请参阅教程.由JSR 310定义,灵感来自Joda-Time,并由ThreeTen-Extra项目扩展.ThreeTen-Backport项目将类反向移植到Java 6和7; Android的ThreeTenABP项目.
该问题含糊不清,如果要求仅提供日期或日期时间,则不清楚.
LocalDate对于仅限日期,没有时间,请使用该LocalDate课程.请注意,在确定日期(例如"今天")时,时区至关重要.
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
LocalDate tenDaysAgo = today.minusDays( 10 );
Run Code Online (Sandbox Code Playgroud)
ZonedDateTime如果您指的是日期时间,那么请使用Instant该类在UTC时间轴上获取时间.从那里,调整到时区以获取ZonedDateTime对象.
Instant now = Instant.now(); // UTC.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
ZonedDateTime tenDaysAgo = zdt.minusDays( 10 );
Run Code Online (Sandbox Code Playgroud)
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.
现在处于维护模式的Joda-Time项目建议迁移到java.time类.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
您可以直接与数据库交换java.time对象.使用符合JDBC 4.2或更高版本的JDBC驱动程序.不需要字符串,不需要课程.java.sql.*
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.
int x = -1;
Calendar cal = ...;
cal.add(Calendar.DATE, x);
Run Code Online (Sandbox Code Playgroud)
编辑:解析器似乎不喜欢Javadoc的链接,所以这里是纯文本:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#add(int,int)
而不是写我自己addDays的礼的建议,我会更喜欢使用DateUtils来自Apache的.它非常方便,特别是当您必须在项目中使用多个位置时.
API说:
addDays(Date date, int amount)
在返回新对象的日期中添加若干天.
请注意,它返回一个新Date对象,并且不会对前一个对象进行更改.
| 归档时间: |
|
| 查看次数: |
246267 次 |
| 最近记录: |