日历到日期问题,有1年错误的期间

Rio*_*ane 1 java calendar date gettime

这是我第一次问,我在所有互联网上找不到解释,所以在这里你去:我正在写一个简单的函数来计算x天前的日期,所以我写了这个代码工作得很好,直到今天,计算的过去日期是未来1年,但不是所有的价值,仅在11天前,其余的都没问题.如果您今天执行此代码,您将获得此输出:您可以在此处执行此操作

区别:-11

2015年12月28日

区别:-12

情节中字

正如你所看到的,虽然这是一个从Calendar到Date解析的问题,但我也检查过Calendar中的值是完全正常的,但是当我转移到Date它不起作用时,我试着这样做手动但不推荐使用这些功能.

import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println(getDate(-11, "YYYY-MM-dd"));
        System.out.println(getDate(-12, "YYYY-MM-dd"));
    }
    public static String getDate(int offset, String SimpleFormat) {
        DateFormat dateFormat = new SimpleDateFormat(SimpleFormat);
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.add(Calendar.DATE, offset);
        Date todate1 = cal.getTime();
        long diff = todate1.getTime()-(new Date()).getTime();
        System.out.println("difference:"+diff/ (24 * 60 * 60 * 1000));
        String fromdate = dateFormat.format(todate1);
        return fromdate;
    }
}    
Run Code Online (Sandbox Code Playgroud)

后来我发现了一个名为Joda-Time的漂亮的库,非常好用而且速度很快,所以我改变了代码来使用它,但同样的问题让我感到惊讶.

DateFormat dateFormat = new SimpleDateFormat(SimpleFormat);
DateTime today = new DateTime();
String fromdate = dateFormat.format(today.plus(Period.days(offset)).toDate());
Run Code Online (Sandbox Code Playgroud)

到目前为止,我还检查了增加350天左右,在这11天期间,它也给出了错误的日期.我知道我可以使用Joda-time格式化程序,但我仍然找不到确切的问题,任何帮助都会很好:)

(对于曾经遇到此问题的人):

DateTimeFormatter fmt = DateTimeFormat.forPattern(SimpleFormat);
Run Code Online (Sandbox Code Playgroud)

Pow*_*ord 6

问题不在于Date或DateTime,而在于格式化程序.

YYYY表示ISO周年.但是,今年最后一个部分周的ISO周年是第二年.

yyyy 意味着日历年,这是你真正想要的.