【问题标题】:java.sql.Date is taking wrong date [duplicate]java.sql.Date 日期错误[重复]
【发布时间】:2015-01-09 06:52:43
【问题描述】:

我正在使用下面的代码,

private static Date date = new Date (2014-1900,11,25); 
System.out.println(date);

它正在显示2014-12-25。我无法理解为什么它给我的日期是12

如果我给了

private static Date date = new Date (2014-1900,12,25); 

它正在返回2015-01-25

谁能帮忙理解一下?

【问题讨论】:

  • 月份是从 0 开始的..
  • 最好使用新的 java time api,或者如果您无法升级到 java 8,则使用 joda time。

标签: java date


【解决方案1】:

Calendar

它接受December 月份为11,因为月份从0 - 11 开始

【讨论】:

    【解决方案2】:

    首先你不应该使用这个构造函数,因为它已经被弃用了。

    第二:查看这个构造函数的documentation

    参数:年份 - 年份减去 1900.month - 0-11 之间的月份。date - 日期 1-31 之间的月份。另见:日历

    month 是一个基于 null 的值,所以 0 --> Jan ... 11 --> Dec

    【讨论】:

      【解决方案3】:

      来自java docs

      Parameters:
      year the year minus 1900.
      month the month between 0-11.
      date the day of the month between 1-31.
      

      月份的范围从0-11, ie Jan - Dec

      【讨论】:

        【解决方案4】:

        避免使用已贬值的Date()构造函数来设置日期,建议使用Calendar

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, 2014);
        calendar.set(Calendar.MONTH, Calendar.NOVEMBER);
        calendar.set(Calendar.DAY_OF_MONTH, 25);
        Date date = calendar.getTime();
        

        您还可以使用simpleDateFormat 设置/格式化日期值:-

        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        Date date = sdf.parse("25-11-2014");
        

        【讨论】:

        • 使用简单的日期格式来启动日期只是浪费 CPU 周期和可能的线程问题
        • 但是最好浪费一个cpu周期,而不是浪费时间使用new Date (2014-1900,11,25);设置日期并想知道哪里出了问题。
        • 我已经更新了我的答案,请再次检查,看看是否真的需要投票!
        猜你喜欢
        • 1970-01-01
        • 2020-03-03
        • 2017-04-03
        • 1970-01-01
        • 2015-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-31
        相关资源
        最近更新 更多