我想减去5天,从该进来作为一个字符串开始的日期。爪哇 - 减去天从日期
我看过一些关于这个主题的其他帖子,但是我从代码中得到的结果总是不正确的。主要的问题是,今年价值似乎没有改变的时候,天相减,例如 - 2012-01-01 subtract 5 days gives me 'Jan 27 2012'
使用此代码 -
cal.add(Calendar.DATE, -5);
请帮助。
我想减去5天,从该进来作为一个字符串开始的日期。爪哇 - 减去天从日期
我看过一些关于这个主题的其他帖子,但是我从代码中得到的结果总是不正确的。主要的问题是,今年价值似乎没有改变的时候,天相减,例如 - 2012-01-01 subtract 5 days gives me 'Jan 27 2012'
使用此代码 -
cal.add(Calendar.DATE, -5);
请帮助。
你知道吗,在Java中,月份1
实际上是2月?
Date februaryTheFirst = new Date(2012,1,1); // equals 2012-02-01
这可能解释你所看到的。如果你要实例2012-01-01相反,你应该做的:
Calendar.getInstance().set(2012,0,1); // 2012-01-01
一定要检查的文档Date(int, int, int)
和Calendar.set(int, int, int)
:
Date firstDayOf2012 = new Date(2012,0,1); // this is 2012-01-01
完全一样的东西与Calendar
打交道时发生。此外,你可以检查你解析字符串的方式。如果您使用SimpleDateFormat.parse(...)
,事情可能会更容易。
奇怪,不是吗?去图...正如一个有趣的事实,的IntelliJ的文档注释这第二个参数,月份,@MagicConstant
,要记住,有事情很奇怪的东西程序员。
用途:
cal.add(Calendar.DAY_OF_MONTH, -5)
编辑:对不起。 DAY_OF_MONTH
是DATE
的同义词。而不是1
使用Calendar.JANUARY
。
Calendar.FEBRUARY是前1五天2012年2月1日为27戳刺2012
该代码段是工作在我的电脑。首先你必须让日历实例执行你的计算。
Calendar cal = Calendar.getInstance();
System.out.println("Today : " + cal.getTime());
// Subtract 300 days from the calendar
cal.add(Calendar.DATE, -300);
System.out.println("300 days ago: " + cal.getTime());
这是输出,你会得到:
Today : Wed Oct 17 10:41:23 EET 2012
300 days ago: Thu Dec 22 10:41:23 EET 2011
你的实现是正确的,你得到正确的值ASLO。
Calendar
的月开始0
0 = Jan
1 = Feb
所以减去5 days
从2012-01-01
肯定会返回你Jan 27 2012
的东西在这里也是这将有助于你Why is January month 0 in Java Calendar?
的Joda-Time 2.7库使这项工作更容易。只需拨打minusDays
方法即可。
String input = "2012-01-01";
DateTimeZone zone = DateTimeZone.forID("America/Montreal");
DateTime dateTime = new DateTime(input, zone);
DateTime then = now.minusDays(5);
DateTimeFormatter formatter = DateTimeFormat.forStyle("FF").withZone(zone).withLocale(Locale.CANADA_FRENCH);
String output = formatter.print(then);
如果你想在一天的开始,添加一个调用withTimeAtStartOfDay
。在你的情况下,这是没有必要的,当解析一个没有时间的日期字符串时。
DateTime dateTimeAtStartOfDay = new DateTime(input, zone).withTimeAtStartOfDay();
如果你只想要日期没有时间的日或时区,使用LocalDate
代替日期时间。
LocalDate then = new LocalDate("2012-01-01").minusDays(5);
如果你需要转换到老java.util.Date,呼吁日期时间toDate
。
Java 8有一个新的包java.time。这些新课程受到Joda-Time的启发,但被重新设计。 java.time和Joda-Time都可以很好地解决这个问题。
你如何解析字符串“2012-01-01”到“日历”?我怀疑你有一个错误。 – Jesper