kapok

垃圾桶,嘿嘿,我藏的这么深你们还能找到啊,真牛!

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  455 随笔 :: 0 文章 :: 76 评论 :: 0 Trackbacks
记事贴4:Java中的日期处理真是烂!
2005年 02月01日
Java中Date不好用,建议使用那个名字长的有点变态的什么Calendar类! 

我想得到当前日期,然后将当前日期加上某一个整数,得到下一个日期,我今天在测试过程中发现Date类不好用,今天是2005-01-14,我想得到前28天的日期,我写了个方法:
 

//传入一个int的时间,经和当前日期相加或者相减,得到一个新日期
// public static String strToDateByInt(int i, String operator) {
//  long j = 0;
//  long tmp;
//
//  Date d = new Date();
//  
//  tmp = (long)(d.getTime()/24 * 3600 * 1000);
//  
//  if ("-".equals(operator)) {
//   j = d.getTime() -  i * 24 * 3600 * 1000;
//   
//  } else if ("+".equals(operator)) {
//   j = d.getTime() +  i * 24 * 3600 * 1000;
//  }
//  Date a = new Date(j);
//
//  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//
//  //  System.out.println(sdf.format(a));
//  return sdf.format(a);
//
// }

结果当我调用这个方法时候,得到的结果竟然是2005-02-07,而这个数值在25-51之间时结果就不对(感谢认真的测试人员!)。

不得已,我查了些资料,将方法改写如下:
 public static String strToDateByInt(int i, String operator) {
  long j = 0;

  Date d = new Date();
  
//  System.out.println("Y=" + d.getYear() + 1900);
//  System.out.println("M=" + d.getMonth());
//  System.out.println("Day=" + d.getDay());
//  System.out.println("Date=" + d.getDate());
  
  GregorianCalendar gc = new GregorianCalendar();
  gc.setTime(d);
  
  System.out.println(d.getTime());
  
  if ("+".equals(operator)) {
   gc.add(GregorianCalendar.DATE, i);
   
  } else if ("-".equals(operator)) {
   gc.add(GregorianCalendar.DATE, (-i));
  }
  
  Date a = gc.getTime();
  
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  
  return sdf.format(a);

 }

然后就可以了,其实这样解决也可以,但是让我讨厌的是这么长的类名,感觉有些变态!
而且上面的注释掉的代码//  System.out.println("Day=" + d.getDay()); 打印出来并不是日期中的天,而是星期几!!!!!!!!!!!

感觉Java开发真是挺费劲的,而且随着演化,好像越来越复杂,今天的输入法不好用,就写到这里了!!!

ltf_ty 于16 : 37 发表 已被浏览66次 评论(2) / 引用(0) 加入博采中心
     注意int与long所能表达的数值范围 [回复]
   

结果当我调用这个方法时候,得到的结果竟然是2005-02-07,而这个数值在25-51之间时结果就不对(感谢认真的测试人员!)。
————————————————————————
j = d.getTime() -  (long) i * 24 * 3600 * 1000;
对j进行加减操作时,要注意把i * 24 * 3600 * 1000强制转化为long,这样就不会出现这个问题了

    zcjl | 2005年 02月28日 17 : 22


     看来是我错了?:< [回复]
   

是我错了?
谢谢楼上的朋友!

    兔八哥 | 2005年 02月28日 17 : 44
posted on 2005-03-09 00:40 笨笨 阅读(281) 评论(0)  编辑  收藏 所属分类: J2EEALL

只有注册用户登录后才能发表评论。


网站导航: