为什么要使用Unix时间戳?

/ 冷姿势 / 0 条评论 / 343人围观

概念

UNIX时间戳:Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp) 是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z. 一个小时表示为UNIX时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。 在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038。


为什么使用UNIX时间戳?

在现在的系统中经常遇到跨数据库的应用开发,在数据库系统中不同的数据库对与时间类型却有不同解释,比如ORACLE的date和MYSQL里面的date就不能直接兼容转换,数据方面还可以使用数据迁移工具进行转换,但是对与应用来说那就是灾难(在这不谈hibernate等可以垮数据库的框架)。 为了实现垮平台在应用系统中记录时间的时候我们就可以使用记录UNIX时间戳的方法做到垮平台性。 现在大多数的语言java、PHP、Perl等都支持直接取UNIX时间戳,将需要记录的时间记录为UNIX时间戳,这样就可以不同的数据库系统中的垮平台性,对与时间的操作只要对时间戳操作就行了。其实这样的处理方法在很多开源的系统中都能看到,但是对与经常搞J2EE的人来说很不习惯.

还是直接上代码吧

    public static void main(String[] args) {
        // 获取unix时间戳
        long time1 = getUnixTimeByDate(new Date());
        System.out.println("获得unix时间戳:" + time1);
        long time2 = new Date().getTime();
        System.out.println("获得时间戳:" + time2);
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH🇲🇲ss");
        Date date1 = new Date();
        Date date2 = new Date();
        date1.setTime(time1 * 1000);
        date2.setTime(time2);
        String s1 = sf.format(date1);
        String s2 = sf.format(date2);
        System.out.println("unix时间戳转换日期:" + s1);
        System.out.println("时间戳转换日期:" + s2);
    }
    public static long getUnixTimeByDate(Date date) {
        return date.getTime() / 1000L;
    }

由于没使用过oracle,在上家公司中用mysql存储日期用的是string类型的字符串格式,现在用的是date格式,但是有缺陷,此博客采用了unix时间戳格式