【问题标题】:Unexpected Behavior using Dates in Java在 Java 中使用日期的意外行为
【发布时间】:2015-12-22 14:27:53
【问题描述】:

我有以下代码:

import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;

import org.junit.Test;

public class DateCalendarTest  {     
    @Test
    public void test1() {
        private final DateFormat df1 = new SimpleDateFormat("MM/dd/yyyy");    
        String batchdt = "2015/09/23";
        System.out.println("Date & Calendar Test: " + batchdt);
        Calendar cal = Calendar.getInstance();
        Date date1 = df1.parse(batchdt);
        cal.setTime(date1);
        System.out.println("Date & Calendar Test: " + cal.getTime());
    }
}

输出:

Date Calendar Test: 2015/09/23
Date Calendar Test: Mon Nov 09 00:00:00 EST 190

有人能解释一下为什么会这样吗?

【问题讨论】:

  • 您期望它的表现如何,为什么? (提示:将您指定的格式与您正在解析的文本进行比较...)
  • 第二个输出是默认格式。
  • 欢迎来到 Stackoverflow。就目前而言,您的问题很难回答。请提供您遇到的具体问题的信息。
  • 那么,问题是什么?看来你约会没问题。如果您指的是00:00:00 部分,那么您应该使用TimeStamp 对象而不是日期。
  • Date/Calendar 只是一个 Unix 纪元以来毫秒数的容器,它们没有超出系统默认值的格式概念,通常用于调试,您应该使用 DateFor at of您选择以您想要的方式格式化结果

标签: java date calendar


【解决方案1】:

您的预期数据与您在SimpleDateFormat 中指定的格式不匹配。但是,默认情况下,它在解析数据的方式上是 lenient 的。例如,9 月 31 日将被解释为 10 月 1 日。

在这里,它被解释为第 23 年第 2,015 个月的第 9 天。2,015 个月是 167 年,11 个月,当它与第 23 年相加时得到 190 年。在这种情况下,它非常宽松。

输出格式是直接打印Date 时的预期格式。

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2017-05-03
    • 2011-10-06
    相关资源
    最近更新 更多