• openresty关于时区的处理


    假如时间戳是86400,距离1970-01-01 00:00:00 过了一天

    转换关系如下

    格林威治时间是1970-01-02 00:00:00 , 格林威治是0时区

    北京时间是 1970-01-02 08:00:00 北京东8区,所以日期需要加8*3600秒显示北京时间

    纽约时间是 1970-01-01 20:00:00 纽约西5区,显示日期需要减5*3600秒显示纽约时间

    纽约夏时令问题

    本来北京比纽约早13个小时,我们早晨八点时他们还是昨天完成21点

    但是纽约人节约能源,充分利用太阳光,约定每年3月第二个周日–11月第一个周日每天,都把时间调早一个小时,早点起床工作学习【这样就和我们差了12个时区,成了西4区】, 其余时间按标准的西5区。

    如何在本时区计算其他时区的时间

    一般系统函数处理时间,都自带时区,比如

    os.date("%Y%m%d %H%M%S", os.time()) // 2022-09-18 08:00:00
    
    • 1

    os.time()时间戳任何国家同一时刻结果都一样,但是os.date函数会自动加上当前的时区

    如果还是os.date, 服务器时区设置的是东八区,那么去纽约时间需要减去12小时(夏令时范围内)

    os.date("%Y%m%d %H%M%S", os.time - 3600*12) // 2022-09-17 20:00:00
    
    • 1

    通过时间戳的修改,抵消os.date加上的时区

    获取其他时区的0点时间戳

    为什么要获取其他时区的0点时间戳这个需求呢?

    假如你从某天气数据源获取其他时区的天气数据json格式的,对方给的是带时区的日期格式 2022-09-18 05:00T-04:00(纽约市),
    这个时间是当地时间5点的数据,后面标了时区西4区, 你需要判断这个数据是否有效,如果你计算的对方的时间是 2022-09-18 09:00 , 都9点了,这个数据肯定没用了,如何比较呢

    当然知道和北京的时区差,可以用os.date 计算当地时间,和这个json时间比较

    也可以计算当地时间所在天过去了多少秒, 然后求得当天0点的时间戳,再比较

    北京当天过去了 (os.time() + 8 * 3600) % 86400 为X秒, 0点时间戳 os.time() - X

    纽约当天过去了 (os.time() - 4 * 3600) % 86400 为Y秒, 0点时间戳 os.time() - Y

    计算0点时间戳是因为判断数据源的有效性是通过比较数据的日期是否大于当天0点的日期,大于的才需要保留,否则认为是过期的数据就舍弃。

  • 相关阅读:
    Eureka介绍与使用
    Android 大图显示优化方案-加载Gif 自定义解码器
    吐血推荐17个提升开发效率的“轮子”
    1.1 大数据简介-hadoop-最全最完整的保姆级的java大数据学习资料
    探索 GAN 和 VAE 之外的 NLP 扩散模型
    一文整理深度学习【CT原理、成像及CT重建知识汇总】
    Druid未授权访问--->ip:端口号/druid/index.html
    【期中复习】深度学习
    Dephi2007以任意字符串分隔字符
    2. 内核解压-关中断进入svc模式
  • 原文地址:https://blog.csdn.net/l_vim11/article/details/126928491