Java字符串转日期时间的问题

3

我似乎看不出下面示例代码的问题。由于某种原因似乎忽略了年份,如下面的输出所示,它说日期是相同的。 我一定错过了一些简单的东西。

01/28/2006
01/16/2007
2008年4月1日 星期二 00:00:00 PDT
2008年4月1日 星期二 00:00:00 PDT
完成

import java.util.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

    class ExampleProgram {
      public static void main(String[] args){
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        String d1String = "01/28/2006";
        String d2String = "01/16/2007";
        System.out.println(d1String);
        System.out.println(d2String);
        Date d1=null;
        try {
            d1 = df.parse(d1String);
        } catch (ParseException e) {                
            System.out.println(e.getMessage());
        }           
        Date d2=null;
        try {
            d2 = df.parse(d2String);
        } catch (ParseException e) {                
            System.out.println(e.getMessage());
        }
        System.out.println(d1);
        System.out.println(d2);
        System.out.println("done");
      }
    }

愚人节玩笑?两个日期都对应4月1日,这似乎太刻意了。+1年,-12个月==同一日期。 如果您的日期格式对象是严格的(df.setLenient(false)),那么它会为您引发错误。 - evnafets
4个回答

6
"dd/MM/yyyy"

should read:

"MM/dd/yyyy"

2

1

它没有给你期望的结果的原因就像Peter所说的那样,SimpleDateFormat应该读取"MM/dd/yyyy"

结果显示它们相等的原因是因为你给它的格式是"dd/MM/yyyy"d1String的月份是28。它将28-12,加上一年,16-12,再加上一年,结果是4(四月),年份现在是2008年。对于d2String也是同样的情况。


0
你可以尝试将日期声明为 Date 对象。

1
他这样做是正确的,构造函数Date(String)已被弃用。他正在使用将字符串转换为日期的正确方法。 - Ian McLaird

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接