如题,测试代码如下:
代码:
Date dt = Date.valueOf("123945-06-09");
System.out.println(dt.toString());
结果:
945-06-09不知该问题是否为JDK 1.6的问题,哪位若发现过JDK中的说明,请最好能给我地址的链接,谢谢。
代码:
Date dt = Date.valueOf("123945-06-09");
System.out.println(dt.toString());
结果:
945-06-09不知该问题是否为JDK 1.6的问题,哪位若发现过JDK中的说明,请最好能给我地址的链接,谢谢。
解决方案 »
- 求助java学习过程
- 下载的一个正则表达式的api--jakarta-oro-2.0.8.jar,应该把它放到什么位置?才能引用他包中的接口或类?
- oracle中生僻字显示正常,到用程序写到xml中却是问号,求解答
- 怎么把 JTextArea的值,变成InputStream
- 用netbeans做桌面数据库问题。
- 在java application中怎么调用.chm文件?
- apache.jasper.JasperException错误
- 这个怎么回答?
- 为什么我的JDBC创建new URL,driver选择oracle,URL不让我选择OCI?
- Java 如何实现加密rar 文件的解压操作
- 有谁用过哈工大的中文分词啊?
- ArrayList索引的起始位置是0还是1?
楼主【moonck】截止到2008-07-22 13:06:48的历史汇总数据(不包括此帖):
发帖的总数量:6 发帖的总分数:100 每贴平均分数:16
回帖的总数量:7 得分贴总数量:1 回帖的得分率:14%
结贴的总数量:6 结贴的总分数:100
无满意结贴数:1 无满意结贴分:20
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:16.67 % 无满意结分率:20.00 %
敬礼!
但是,大于9999时JDK为何返回的是我测试出来的结果,想知道原因或者JDK中明确说明的内容。
public static void main(String[] args) throws Exception
{
String str = "123945-06-09";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
Date d = sdf.parse(str);
System.out.println(sdf.format(d));
}
int year;
int month;
int day;
int firstDash;
int secondDash; if (s == null) throw new java.lang.IllegalArgumentException(); firstDash = s.indexOf('-');
secondDash = s.indexOf('-', firstDash+1);
if ((firstDash > 0) & (secondDash > 0) & (secondDash < s.length()-1)) {
year = Integer.parseInt(s.substring(0, firstDash)) - 1900;
month = Integer.parseInt(s.substring(firstDash+1, secondDash)) - 1;
day = Integer.parseInt(s.substring(secondDash+1));
} else {
throw new java.lang.IllegalArgumentException();
}
return new Date(year, month, day);
}这是jdk5.0的做法,你最好看看6.0是怎么做的。
int year = super.getYear() + 1900;
int month = super.getMonth() + 1;
int day = super.getDate();
//执行到此处取出的 year month day 分别为 123945 6 9 一切正常
//是下面代码出的问题
char buf[] = "2000-00-00".toCharArray();
buf[0] = Character.forDigit(year/1000,10);
buf[1] = Character.forDigit((year/100)%10,10);
buf[2] = Character.forDigit((year/10)%10,10);
buf[3] = Character.forDigit(year%10,10);
buf[5] = Character.forDigit(month/10,10);
buf[6] = Character.forDigit(month%10,10);
buf[8] = Character.forDigit(day/10,10);
buf[9] = Character.forDigit(day%10,10);
return new String(buf);
}你可以用下面代码试试,它能证明在 Date 对象内部存储的值正确,只是最后 toString() 时出现问题了 System.out.println(dt.getYear() + 1900);
System.out.println(dt.getMonth() + 1);
System.out.println(dt.getDate());
如下的方式输出时就是对的了。Java code
Date dt = Date.valueOf("123945-06-09");
System.out.println(dt.toLocaleString());结果:
123945/06/09 0:00:00但是toLocaleString()方法在JDK1.6中已经不推荐使用了,
为何使用toString()方法返回的却是945-06-09。
此 Bug 的状态是 Fix Delivered - The changeset or fix has been integrated into the master area and will show up in the next build promotion.
谢谢各位,现在开始给分了。