gpt4 book ai didi

java - 使用java日历减去1天时得到错误的日期

转载 作者:行者123 更新时间:2023-11-30 02:41:56 24 4
gpt4 key购买 nike

我很难解决 Calendar.add() 遇到的问题。我需要进行健全性检查。

今天我正在处理的一个项目的集成测试开始失败。我认为这与我通过减去 x 天数来计算日期的方法有关。

出于某种原因,当我从今天(2017 年 1 月 2 日星期一)减去 1 天时,我得到的结果是 2016-01-01?我预计2017-01-01?

我尝试了其他日期,似乎工作正常,但似乎当这一天是任何一年的第二天星期一时,它会减去 1 年太多,而不是一天?

我是否误解了在某些情况下减去天数的基本知识?

...

// fails. Result is 2010-01-01??
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
Calendar now = Calendar.getInstance();
now.set(2011, 0, 2);
now.add(Calendar.DATE, -1);
assertEquals("2011-01-01", format.format(now.getTime()));

...
// fails. Result is 2016-01-01??
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
Calendar now = Calendar.getInstance();
now.set(2017, 0, 2);
now.add(Calendar.DATE, -1);
assertEquals("2017-01-01", format.format(now.getTime()));

...

// works fine.
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
Calendar now = Calendar.getInstance();
now.set(2017, 0, 5);
now.add(Calendar.DATE, -1);
assertEquals("2017-01-04", format.format(now.getTime()));

...

// works fine.
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
Calendar now = Calendar.getInstance();
now.set(2016, 0, 2);
now.add(Calendar.DATE, -1);
assertEquals("2015-01-01", format.format(now.getTime()));

...

最佳答案

在格式化模式中使用小写的 yyyy 而不是大写的 YYYY。正如这里所见:

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Dates {
public static void main(String args[]){
// OK
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar now = Calendar.getInstance();
now.clear();
now.set(2011, 0, 2);
now.add(Calendar.DAY_OF_MONTH, -1);
System.out.println(("2011-01-01".equals(format.format(now.getTime())) ));
System.out.println(format.format(now.getTime()));

// OK
format = new SimpleDateFormat("yyyy-MM-dd");
now = Calendar.getInstance();
now.clear();
now.set(2017, 0, 2);
now.add(Calendar.DAY_OF_MONTH, -1);
System.out.println(("2017-01-01".equals(format.format(now.getTime())) ));
System.out.println(format.format(now.getTime()));

// OK
format = new SimpleDateFormat("yyyy-MM-dd");
now = Calendar.getInstance();
now.clear();
now.set(2017, 0, 5);
now.add(Calendar.DAY_OF_MONTH, -1);
System.out.println(("2017-01-04".equals(format.format(now.getTime())) ));
System.out.println(format.format(now.getTime()));

// OK
format = new SimpleDateFormat("yyyy-MM-dd");
now = Calendar.getInstance();
now.clear();
now.set(2016, 0, 2);
now.add(Calendar.DAY_OF_MONTH, -1);
System.out.println(("2016-01-01".equals(format.format(now.getTime())) ));
System.out.println(format.format(now.getTime()));
}
}

输出:

true
2011-01-01
true
2017-01-01
true
2017-01-04
true
2016-01-01

关于java - 使用java日历减去1天时得到错误的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41431154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com