java的日期类

今天遇到一个问题,我们的一个小系统保存数据的时候按照星期几来保存的,一共有14张表,1天两张。表的命名是前缀加0加星期。例如**_0_1 ,**_0_2这样。星期一的数据保存在**_0_1 和**_1_1 里面。4月11号的数据就应该保存在**_0_7 和**_1_7 这两张表里,但是我发现晚上晚上11点过后的数据就被保存到**_0_2和**_1_2里了。
原来也出现过类似的情况,是因为开始分表的时候我们取机器的时间来分表,但是后来保存数据库的时候又取了数据库时间来设置了分表字段,这样就导致了我们的分表不正确。
但是这次我仔细查看了我们的分表字段,发现是正确的,只是保存的表不对。
开始,我怀疑是机器的时间被修改了,但仔细想一下,发现这不可能的,因为机器时间如果被修改,那么我取分表的时间也应该被修改,这样也不会出现问题的。
纠结了很久,后来请教一位同事,他后来指出可能是Calendar的时区设置有问题,而且结果确实看起来是在11点的时候,时间被多加了一个小时,插入到第二天的表里去了。
后来才发现我们使用的Calendar是com.ibm.icu.util.Calendar,用2010-04-11 23:00:00 时间去测试,确实返回的结果是1,这样看来就是Calendar类使用错误了。

上午我还用数据测试了,发现分表函数返回结果是正确的,但是没有用11点的数据去测试,看来我还是没有把测试最基本的要素掌握,应该重现场景,以后要切记了。
这是分表的函数
public String getTableNameByWeek(Date d, int index) {
StringBuilder tableName = new StringBuilder(prefix);
tableName.append("_").append(index);
tableName.append("_");
Calendar cal = Calendar.getInstance();
cal.setTime(d);
int weekDay = cal.get(Calendar.DAY_OF_WEEK);
int newDay = weekDay - 1;
if (newDay == 0) {
newDay = 7;
}
tableName.append(newDay);
return tableName.toString();
}

这是测试函数:
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dt = format.parse("2010-04-17 23:00:00");
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
int weekDay = cal.get(Calendar.DAY_OF_WEEK);
int newDay = weekDay - 1;
if (newDay == 0) {
newDay = 7;
}
System.out.print(newDay);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值