关于日期和时间
日期 时间 关于
2023-09-14 09:10:08 时间
之所以会涉及到这一块主要是在一个项目中,数据是以时间为唯一索引的。
该数据每天仅仅产生一条。所以设计中将GMT时间天的0时0分0秒0毫秒作为数据索引。
初时并没有发现什么不妥。到项目后期,一个开发者提出了关于时区的问题,比方我们中国属于东八区,
也就是时间会比GMT时间早8个小时, 当GMT时间为0点。中国时间为8点,
而比方中国时间为7点时,GMT时间为昨天的23点!
坑货!这就是没有考虑到的时区问题!
依照正常的逻辑,所以日期都应该是以本地时间为准的。
折腾了挺久,终于找到完美的解决方式:
先说下基本思路:
1、日期应该以本地为准,日期的变更是本地直接可感的
2、须要把日期转为为唯一的时间戳,以作为数据库的唯一索引
3、时间戳最好以GMT时间为准
代码思路:
1、建立一张本地日历,获得本地的日期
2、建议一张GMT日历,设置1中得到的日期,并把时分秒毫秒归零
3、从GMT日历中获得时间戳
总体代码实现例如以下:
private void testTime1() { text1.setText(""); //文本清空 //获得默认日历的日期 Calendar calDefault = Calendar.getInstance(); // Calendar calDefault = new GregorianCalendar(TimeZone.getTimeZone("GMT-12")); int year = calDefault.get(Calendar.YEAR); int month = calDefault.get(Calendar.MONTH); int day = calDefault.get(Calendar.DAY_OF_MONTH); text1.append(calDefault.getTimeInMillis()+"\n"); text1.append(calDefault.toString()+"\n"); //设置GMT日历为同样日期。且时分秒毫秒置零 Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month); cal.set(Calendar.DAY_OF_MONTH, day); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); long time = cal.getTimeInMillis(); text1.append( time+"\n"); text1.append(cal.toString()+"\n"); }当中特别须要注意的是,日历在设置完參数后并不利己生成对应的时间戳。
查看源代码能够发现
protected abstract void computeTime();
用来实现时间戳的生成,可惜该方法是protected ,我们无法直接使用。
顺藤摸瓜。搜索下发现
public long getTimeInMillis();
会调用computeTime()方法。
综上,我们在给日历设置完參数后,须要调用getTimeInMillis()才会生成对应的时间戳。
以上,完成。
相关文章
- sql服务器系统时间格式,SQL Server 日期格式和日期操做
- 【MySQL数据库】MySQL聚合函数、时间函数、日期函数、窗口函数等函数的使用
- JavaScript 日期选择器 Pikaday 的高级用法
- 在postgresql数据库中判断是否是数字和日期时间格式函数操作
- JAVA中关于获取时间(日期)的总结大全详解程序员
- js时间戳与日期格式的相互转换详解编程语言
- JS获取当前日期时间并定时刷新详解编程语言
- DateUtil日期时间相关的工具类常用方法详解编程语言
- Java经典实例:纪元秒和本地日期时间互换详解编程语言
- SAP中日期时间函数总结详解编程语言
- SAP ABAP —–ABAP 有用的日期FUNCTION详解编程语言
- ABAP – 日期格式转换 & ABAP常用日期处理函数详解编程语言
- Linux日期设置:实现自动时间同步(linuxdated)
- Linux日期命令用法指南(linuxdate用法)
- MySQL日期加减法实现数据查询(mysql日期加减法)
- Linux查看日期的简易方式(linux显示日期)
- 如何使用Oracle比较日期/时间大小(oracle时间比较大小)
- Oracle数据库实现获取昨天的日期(oracle取昨天日期)
- 每月奇数日期MSSQL存储过程实现(mssql 每月奇数日期)
- MySQL如何简化日期时间字符串(mysql去掉时分秒)
- MySQL中日期时间不包含毫秒(mysql中不存分秒)
- Oracle中如何将日期加一(oracle中的日期加一)
- Oracle中日期计算的年初到年尾(oracle中日期年 1)
- 完整显示当前日期和时间的JS代码
- phpMysql日期和时间函数集合
- 使用PHP的日期与时间函数技巧
- C#常用日期时间函数(老用不熟)
- php操作sqlserver关于时间日期读取的小小见解
- javascript日期转换时间戳转日期格式
- Android桌面Widget开发要点解析(时间日期Widget)
- ASP.NET如何获取两个日期之间的天数
- SQLite3中的日期时间函数使用小结
- 浅谈JS日期(Date)处理函数
- 两个php日期控制类实例