今天在写一个流量控制的模块,要做一个根据输入的时间,获得下一天0点0分0秒的时间戳。
public long caculateResetTimestamp(long currentTimestamp) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(currentTimestamp);
cal.clear(Calendar.MILLISECOND);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.HOUR);
cal.clear(Calendar.HOUR_OF_DAY);
cal.roll(Calendar.DATE, true);
return cal.getTimeInMillis();
}
程序非常简单,习惯性地做了个单元测试。尽然没有通过
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
DailyResetPolicy resetPolicy = new DailyResetPolicy();
@Test
public void testCaculateResetTimestamp() throws ParseException {
long input = toMillis("2010-01-12 12:12:23.234");
long expected = toMillis("2010-01-13 00:00:00.000");
long result = resetPolicy.caculateResetTimestamp(input);
assertEquals(expected, result);
}
long toMillis(String source) throws ParseException {
return format.parse(source).getTime();
}
这怎么可能!!明明应该是对的啊。后来打出时间来,看了下。输出的结果是
2010-01-13 12:00:00.000
是小时域有问题。仔细阅读了JavaDoc后发现,不能使用clear(Calendar.HOUR_OF_DAY)来清除小时域;clear(Calendar.HOUR)也不行。
还是老老实实用set(Calendar.HOUR_OF_DAY,0)来清除小时域。最后干脆全部用set方法了。
正确的版本是这样的:
public long caculateResetTimestamp(long currentTimestamp) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(currentTimestamp);
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.roll(Calendar.DATE, true);
return cal.getTimeInMillis();
}
分享到:
相关推荐
<script type=\"text/javascript\" src=\"<%=ctx%>/js/calendar/calendar.js\"> <script type=\"text/javascript\" src=\"<%=ctx%>/js/calendar/calendar-zh.js\"> ...
calendar python django
LunarCalendar返回农历(阴历)日期的JAR包 根据指定日期计算对应农历日期(这个计算方法是网上找的,最初的作者是谁已经无法考证了,感谢网络资源吧!),本人封装成好用的JAR包后发不出来,供大家免费下载! ...
Calendar 组件Calendar 组件Calendar 组件Calendar 组件Calendar 组件Calendar 组件
Calendar万年历.zip,网上找的代码!!!!!!!!!!
Java 之 Date 和 Calendar 实例
bootstrap_calendar Demo
Calendar日期代码详解
WEB开发中应用的Calendar控件往往没有太大的控件给Calendar,实际用的控件往往就是Calendar的扩展开发,本程序是作者就web实际应用开发的Calendar控件
VB中的日历控件,microsoft calendar control 11.0.8161.0,请注意版本对应!
ext js calendar 日历ext js calendar 日历ext js calendar 日历
bootstrap calendar 全年日历显示,可做年度行事历等功能,使用起来特别方便,相关使用方法详见官网:http://www.bootstrap-year-calendar.com/#Documentation/Installation
javascript calendar
LunarCalendar.gadget
js 日历控件 calendar,js 日历控件 calendar,js 日历控件 calendar,js 日历控件 calendar,js 日历控件 calendar,js 日历控件 calendar
Date与Calendar 两者的区别与联系
jQuery Frontier Calendar 是整整一个月的 jQuery 日历插件,外观有点像 Google Calendar 。所有 UI 元素(比如下个月和上个月按钮,添加事件表格,工具提示等等)都不属于日历插件。用户可以使用 API 来控制这些...
ASP.NET Calendar如何给每天添加日志
var WebCalendar = new WebCalendar(); function document.onclick() { if(WebCalendar.eventSrc != window.event.srcElement) hiddenCalendar(); } function WebCalendar() //初始化日历的设置 {
那现在最为普及和通用的日历就是 \"Gregorian Calendar\"。也就是我们在讲述年份时常用 \"公元几几年\"。Calendar 抽象类定义了足够的方法,让我们能够表述日历的规则。Java 本身提供了对 \"Gregorian Calendar\" ...