Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getMonth getYear getDate给出错误结果_Java - Fatal编程技术网

Java getMonth getYear getDate给出错误结果

Java getMonth getYear getDate给出错误结果,java,Java,我有一种方法来计算给定格式的制造日期(“yyyy-MM-dd”)的到期日期以及产品可以在int中使用之前的月份。首先,我尝试使用getYear getMonth getDate of Month类,如下所示,但得到了错误结果: public void calculateExpiryDate(List<Item> items) { Iterator<Item> itr=items.iterator(); while(itr.hasNe

我有一种方法来计算给定格式的制造日期(“yyyy-MM-dd”)的到期日期以及产品可以在int中使用之前的月份。首先,我尝试使用getYear getMonth getDate of Month类,如下所示,但得到了错误结果:

public void calculateExpiryDate(List<Item> items)
    {
        Iterator<Item> itr=items.iterator();
        while(itr.hasNext())
        {
            Item i=itr.next();
            Date md=i.getManufacturingDate();
            int ubm=i.getUseBeforeMonths();
            Calendar c=new GregorianCalendar(md.getYear(),md.getMonth(),md.getDate());
            //System.out.println(c);
            c.add(Calendar.MONTH, ubm);
            Date exp=c.getTime();
            i.setExpiryDate(exp);
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy MM dd");
            System.out.println(md+" "+ubm+" "+sdf.format(exp)+"  "+" "+i.getId());
        }
    }
public void calculateExpiryDate(列表项)
{
迭代器itr=items.Iterator();
while(itr.hasNext())
{
第i项=itr.next();
Date md=i.getManufacturingDate();
int ubm=i.getUseBeforeMonths();
日历c=新的公历日历(md.getYear(),md.getMonth(),md.getDate());
//系统输出打印ln(c);
c、 添加(日历月,ubm);
dateexp=c.getTime();
i、 设定呼气时间(exp);
SimpleDataFormat sdf=新SimpleDataFormat(“yyyy-MM-dd”);
System.out.println(md++ubm+++sdf.format(exp)++++i.getId());
}
}
但是,当我停止使用它并使用setTime时,它解决了我的问题。我想知道我以前犯了什么错误,为什么那天事情不起作用,如果有任何错误(因为我没有得到任何编译时错误),它实际上是什么。下面是给出正确结果的相同代码的版本

public void calculateExpiryDate(List<Item> items)
    {
        Iterator<Item> itr=items.iterator();
        while(itr.hasNext())
        {
            Item i=itr.next();
            Date md=i.getManufacturingDate();
            int ubm=i.getUseBeforeMonths();
            Calendar c=new GregorianCalendar();
            c.setTime(md);
            //System.out.println(c);
            c.add(Calendar.MONTH, ubm);
            Date exp=c.getTime();
            i.setExpiryDate(exp);
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy MM dd");
            System.out.println(md+" "+ubm+" "+sdf.format(exp)+"  "+" "+i.getId());
        }
    }
public void calculateExpiryDate(列表项)
{
迭代器itr=items.Iterator();
while(itr.hasNext())
{
第i项=itr.next();
Date md=i.getManufacturingDate();
int ubm=i.getUseBeforeMonths();
日历c=新的公历日历();
c、 设定时间(md);
//系统输出打印ln(c);
c、 添加(日历月,ubm);
dateexp=c.getTime();
i、 设定呼气时间(exp);
SimpleDataFormat sdf=新SimpleDataFormat(“yyyy-MM-dd”);
System.out.println(md++ubm+++sdf.format(exp)++++i.getId());
}
}

您的问题是
GregoriaCalendar
的构造函数预期年份为绝对值,但
getYear()
返回1900的偏移量

查看Java文档可以发现(除了使用的Date方法都不推荐之外):

Date.getYear():
返回一个值,该值是从包含该日期对象表示的时间瞬间或以该日期对象表示的时间瞬间开始的年份中减去1900的结果,如在本地时区中解释的那样。

格雷戈里安卡伦达尔:
年份构造函数参数
用于在日历中设置年份日历字段的值


setTime(Date)
使用了
md.getTime()
返回的值,该值是自1970年1月1日00:00:00 GMT以来的
毫秒数

您得到的错误结果是什么?上次我检查时,
java.util.Date
函数没有问题。。缩小问题的范围,并张贴一份可能的《谢谢大家:》的复制件。在我的problem@subOptimal.... 曼恩:非常感谢,你做到了!:)'日历c=新的公历日历(md.getYear()+1900,md.getMonth(),md.getDate());'给我答案