美文网首页
时间戳和时区

时间戳和时区

作者: 邵红晓 | 来源:发表于2020-05-25 18:47 被阅读0次

Unix时间戳(Unix timestamp),Unix时间(Unix time)、druid POSIX时间(POSIX time),GMT,UTC

以上时间概念都是:定义为从格林威治GMT(UTC)时间1970年01月01日00时00分00秒起至现在的总秒数,地球上都相同
long t = System.currentTimeMillis();

时区

相同的时间点,在地区上不同的地区时间表示方式不一样,北京时间是东八区

        Date date = new Date();
        // 北京
        SimpleDateFormat bjSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 设置北京时区
        bjSdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
        // 东京
        SimpleDateFormat tokyoSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 设置东京时区
        tokyoSdf.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));

        // 伦敦
        SimpleDateFormat londonSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 设置伦敦时区
        londonSdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));

        System.out.println("毫秒数:" + date.getTime() + ", 北京时间:" + bjSdf.format(date));
        System.out.println("毫秒数:" + date.getTime() + ", 东京时间:" + tokyoSdf.format(date));
        System.out.println("毫秒数:" + date.getTime() + ", 伦敦时间:" + londonSdf.format(date));

毫秒数:1590388818846, 北京时间:2020-05-25 14:40:18
毫秒数:1590388818846, 东京时间:2020-05-25 15:40:18
毫秒数:1590388818846, 伦敦时间:2020-05-25 07:40:18
  • 发现显示的时间戳都是一样的,相同的时间点,不同地区时间不同

时间格式

"yyyy-MM-dd'T'HH:mm:ss.SSSZ" UTC - timestamp(3)
字母T代表使用UTC时间
字母Z代表时间偏移量
实际写法中字母Z应该被偏移量替换,例如 “2017-1-7T10:21+0800”或者”2017-1-7T10:21-0800”,字母Z被+0800和-0800替换了。

  • 案例如下:
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        System.out.println(sdf.getTimeZone());
        System.out.println(sdf.format(new Date()));
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
2020-05-25T10:31:45.082+0000

        String utcTime = "2020-05-25T10:32:19Z";
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        sdf2.setTimeZone(TimeZone.getTimeZone("UTC"));

        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf3.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
        //解析,格式化
        Date after = sdf2.parse(utcTime);
        System.out.println(sdf3.format(after));
`2020-05-25 10:32:19`

建议时间存储方式

基于“数据的存储和显示相分离”的设计原则,我们只要把表示绝对时间的时间戳(Long型)存储数据库,在显示的时候根据用户设置的时区格式化为正确的字符串。

相关文章

  • 时间戳和时区

    Unix时间戳(Unix timestamp),Unix时间(Unix time)、druid POSIX时间(P...

  • 时间序列

    时区表示 时区转换 时间跨度转换 时期和时间戳之间的转换

  • 时间戳、时间和时区

    时间戳 时间戳是容易理解的。 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年0...

  • PostgreSQL时间戳与时区

    时间戳类型 PostgreSQL 提供两种存储时间戳的数据类型: 不带时区的 TIMESTAMP 和带时区的 TI...

  • 时区、时间戳、 时区、格林威治(GMT)、协调世界时(UTC)的

    时区和时间戳 从漫画中举的例子来看,这里的时间戳,指的就是Unix时间戳(Unix timestamp)。它也被称...

  • NSDate

    创建时间: 时间增减: 时间戳: 日期比较: 设置日期格式: 获取所有时区名称: 设置时区: 将时区配置给date...

  • python时间戳、datetime和时区

    结果是 但是我的认知中,timestamp是与时区无关, 应该是不会改变的所以这个结果为什么两次输入的timest...

  • 时区和时间戳的关系

    时区指地球上的一块区域使用的同一时间定义,以经度划分,每个时区横跨15经度,总共24个时区,东西各12个时区。 时...

  • iOS 时间戳 时区

    时间戳 时间戳(Unix)是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日...

  • 日期和时间函数 date 的使用

    pytz:设置时区 time.time():获取当前时间的时间戳 time.localtime():输入时间戳返回...

网友评论

      本文标题:时间戳和时区

      本文链接:https://www.haomeiwen.com/subject/zlsyahtx.html