最新消息:发现真没时间折腾VPS,最近又换了个空间。呵呵

Java中两位年份的转化问题

最近在项目中碰到了一个两位年份转化的问题。

一个4012的YYmm的时间转化为日期时,变成1940年12月,与预想的2040年12月不一致。看了一下Java的源代码,如果不设置基准时间的话,Java的SimpleDateFormat默认转化前80年到后19年的年份。比如现在的时间是2013/4/15 10:00:00.000那么33/4/15 10:00:00.000会转化为1933年,而33/4/15 9:59:59.999会转化为2033年。修改方法是用set2DigitYearStart指定两位的开始时间。

修改之前的代码

Java
public static Date getDate(String strDate) {
    Date date = null;
    if (strDate!= null) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyMM");
        formatter.setLenient(false);
        try {
            date = formatter.parse(strDate);
        }
        catch (Exception e) {
        }
    }
    return date;
}

修改之后的代码

Java
public static Date getDate(String strDate) {
    Date date = null;
    if (strDate!= null) {
        Calendar startTime = Calendar.getInstance();
        int year = startTime.get(Calendar.YEAR) - 20;
        // 这里初始化时间,然后设置年份。只以年份为基准,不看时间
        startTime.clear();
        startTime.set(Calendar.YEAR, year);

        SimpleDateFormat formatter = new SimpleDateFormat("yyMM");
        formatter.setLenient(false);
        formatter.set2DigitYearStart(startTime.getTime());

        try {
            date = formatter.parse(strDate);
        }
        catch (Exception e) {
        }
    }
    return date;
}

转载请注明:宇托的狗窝 » Java中两位年份的转化问题

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址