gehuiwin 2011-05-31 17:35
浏览 249
已采纳

很奇怪的Java 日期处理问题,月底才会出现

[code="java"]public class TestDate {

public static void main(String[] args) {

    Date date = new Date();
    String selectedYear = "2011";
    String selectedMonth = "3";
    // date.setDate(1); // 这里不屏蔽的话,问题就不会出现了,不知为什么
    if (selectedYear != null) {
        date.setMonth(Integer.valueOf(selectedMonth).intValue());
        date.setYear(Integer.valueOf(selectedYear).intValue() - 1900);

    }
    System.out.println("selectedYear : " + Integer.valueOf(date.getYear() + 1900));
    System.out.println("selectedMonth : " + Integer.valueOf(date.getMonth()));

    Date startDate = new Date(date.getYear(), date.getMonth(), 1);
    Date endDate = new Date(date.getYear(), date.getMonth() + 1, 1);
    System.out.println("Start Date :" + startDate);
    System.out.println("End Date :" + endDate);

}

}[/code]

里面是一段很早以前的代码,前台输入的是 2011年4月,后台处理了一下,变成5月了(只有月底才有可能出现的),麻烦大家帮忙分析一下为什么

  • 写回答

4条回答 默认 最新

  • fmjsjx 2011-06-01 10:20
    关注

    [quote]
    fmjsjx 写道
    刚刚测试了一下,的确有些问题,可能是由于java.util.Date#setXXX方法都过期了,jdk不再维护这些方法,所以在JDK更新了后造成某些错误,建议楼主改用java.util.Calendar重构代码。
    Calendar示例:
    Java代码 收藏代码

    Calendar calendar = Calendar.getInstance();  
    calendar.set(2011, 3, 1);  
    Date date = calender.getTime();  
    

    重写肯定可以搞定,就是想知道现在的代码为什么造成这个结果了

    [/quote]
    话说,楼主是不是没仔细看,我简单加一下吧:
    由于java.util.Date#setXXX()方法在很早以前(好像是JDK1.1)就过期了,sun公司不再维护这些方法,也不再保证这些方法在以后的JDK版本中的正确性,所以在JDK升级了以后,就有可能造成这些方法在使用过程中会发生错误,这些sun公司都是不负责的。
    所以,基本上很有可能是JDK本身的问题,楼主没有必要深入研究。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波