我试图从格式为“ 9/2/2004”的字符串创建日期对象
这是我的代码:
//Set Date
String[] date_array = record[0].split("/");
Date date = new GregorianCalendar(Integer.parseInt(date_array[2]), Integer.parseInt(date_array[1]),
Integer.parseInt(date_array[0])).getTime();
但是,当我尝试输出日期对象时,它显示为:
Tue Mar 09 00:00:00 EST 2004
4/20/2004
打印为:
Sun Sep 04 00:00:00 EDT 2005
问题:这是怎么回事?出了什么问题?
答案 0 :(得分:2)
您不需要拆分String即可分别提取日期,月份和年份。您可以使用SimpleDateFormat
解析此Date字符串:
String dateStr = "9/2/2004"; // I assume it is in dd/MM/yyyy format
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date date = format.parse(dateStr);
答案 1 :(得分:1)
(来自Javadoc的参数顺序为GregorianCalendar(int year, int month, int dayOfMonth)
-您先传递的是year
然后是day
然后是month
。您还需要考虑1月为0
。喜欢,
String record = "4/20/2004";
String[] date_array = record.split("/");
Date date = new GregorianCalendar(Integer.parseInt(date_array[2]),
Integer.parseInt(date_array[0]) - 1,
Integer.parseInt(date_array[1])).getTime();
System.out.println(date);
答案 2 :(得分:1)
为什么不使用DateTimeFormat解析日期时间文本。试试吧:
String text = "9/2/2004";
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date dt = format.parse(text);
答案 3 :(得分:1)
只需使用DateTimeFormat
来解析您的字符串日期时间:
String dateInString = "9/2/2004";
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
try {
Date date = formatter.parse(dateInString);
} catch (ParseException e) {
e.printStackTrace();
}
答案 4 :(得分:0)
问题:这是怎么回事?出了什么问题?
两个基本错误:
Date
和GregorianCalendar
早已过时,不再推荐,因为它们的设计总是很差。此外,尽管它们的名称不代表日期({Date
是时间点,而GregorianCalendar
是特定时区中的日期和时间)。用这些旧类弄错事情很容易,所以也难怪你也做过,成千上万的工作要做(只需看看有多少Stack Overflow问题可以解决这个问题)。更具体地说明了什么:您将数字2004、2和9正确传递给了GregorianCalendar
构造函数。该构造函数将参数依次指定为年,月和日。此外,它还令人困惑地假设基于0的月份,其中0表示一月,因此2表示三月。因此,您会在JVM的默认时区中于2004年3月9日00:00:00到达。
但是2004年4月20日呢?当月份是0到11时,则20不能是一个月。具有默认设置的GregorianCalendar
无关紧要,它只是进行推断,并在第二年持续数月。因此,第11个月将是2004年12月,第12个月将是2005年1月,依此类推,所以最后我们将第20个月是2005年9月。
您的问题的现代解决方案是:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("M/d/u");
LocalDate date = LocalDate.parse("9/2/2004", dtf);
System.out.println(date);
输出为:
2004-09-02
M/d/u
是一个格式模式字符串,用于指定您的格式由月,日和年组成,中间用斜杠分隔。请注意,格式模式字符串区分大小写:您需要大写的M
和小写的d
和u
。所有可能的格式字母都在文档中。
java.time
。DateTimeFormatter
documentation(包括图案字母)