1

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

差异:-11

2015-12-28

差异:-12

2014-12-27

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

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;
    }
}    

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

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

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

(对于那些曾经遇到过这个问题的人):

DateTimeFormatter fmt = DateTimeFormat.forPattern(SimpleFormat);
4

1 回答 1

7

问题不在于日期或日期时间,而在于格式化程序。

YYYY表示 ISO 周年。但是,一年中最后一周的 ISO 周年是下一年

yyyy表示日历年,这是您真正想要的。

于 2015-01-08T18:01:45.863 回答