引子:(转载请注明出处)
今天测试人员向我报了个诡异的bug。在local跑程序的时候 webbrowser的time zone经过服务器端解析后,可以正确的得到GMT+8(Beijing),但是,一旦放到服务器上,跑出来的结果就变成了GMT+7。
开始百思不得其解,后来想想,会不会是夏令时(daylight saving time)引发的问题。
系统将client timezone转换为server 的TimeZone的流程:
1.new Date().getTimezoneOffset()取得browser的offset,并提交
2.服务器端接收到,并转换
int rawOffset = new Date().getTimezoneOffset() * (-1) * 60 * 1000
然后用TimeZone.getTimeZone(TimeZone.availableID)一个个去匹配。
上面两步都会产生daylight saving的误差。
服务器端的解决方案:
根据jdk上所说
1.如果是GMT+(-)xx这种去创建TimeZone,则不会考虑dsv的问题。
2.getRawOffset始终返回不含Dsv的值。
那么,在接收到客户端的offset后
只要offset / -60就可以得到GMT+xx的xx。
客户端的解决方案:
由于夏时令永远是往前播一个小时之类的。所以只需要:
var clientTimeZone = getTimeZone();
alert(clientTimeZone.displayName);
alert(clientTimeZone.useDaylightTime);
alert(clientTimeZone.inDayLightTime);
function getTimeZone() {
var date = new Date();
var offset = date.getTimezoneOffset();
date.setDate(1);
var dayLightTime = false;
var inDayLightTime = false;
for (var month = 0; month < 12; month++) {
date.setMonth(month);
var currentMonthOffset = date.getTimezoneOffset();
if (offset != currentMonthOffset) {
dayLightTime = true;
if (offset < currentMonthOffset) {
offset = currentMonthOffset;
inDayLightTime = true;
}
}
}
var dispName = "GMT";
var offsetHour = offset / -60;
if (offsetHour >= 0) {
dispName += "+";
}
dispName += offsetHour;
return {
// 时区名
displayName: dispName,
// 和标准的偏移时间
rawOffset: offset,
// 是否用了夏时令
useDaylightTime: dayLightTime,
// 是否在夏时令的范围内
inDayLightTime: inDayLightTime
};
}
即可取得时区名,和标准UTC的offset,是否用了夏时令,现在是否在夏时令的范围内。
分享到:
相关推荐
本项目“前端项目-d3-dsv.zip”聚焦于一个特定的前端库——D3.js的一个模块,用于处理分隔符分隔值(如CSV和TSV)的数据解析和格式化。D3.js(Data-Driven Documents)是一个强大的JavaScript库,专门用于数据可视化...
陀螺仪LSM6DSV16X与AI集成(7)----FIFO数据读取与配置 CSDN文字教程:https://blog.csdn.net/qq_24312945/article/details/139890938 B站教学视频:https://www.bilibili.com/video/BV12s421T73k/ LSM6DSV16X是一款高...
陀螺仪LSM6DSV16X与AI集成(2)----姿态解算CSDN文字教程:https://blog.csdn.net/qq_24312945/article/details/134902735B站教学视频:https://www.bilibili.com/video/BV1Jw41187c5/LSM6DSV16X 特性涉及到的是一种低...
DSV PHP Editor, PHPeditor, EditorPHP, PHP, Editor, Script, CGI, Web, HTML, Java, CSS, FTP, Preview, Shareware,IDE, Syntax Code, Source DSV PHP Editor is a program for creating, editing and debugging ...
**中文AN5763:LSM6DSV16X——嵌入式机器学习内核与Qvar+检测功能** LSM6DSV16X是STMicroelectronics推出的一款集成3轴加速度计和3轴陀螺仪的系统级封装(System-in-Package, SiP)器件,适用于多种智能设备,如...
LSM6DSV16X基于MLC智能笔动作识别(3)----MEMS Studio训练数据 CSDN文字教程:https://blog.csdn.net/qq_24312945/article/details/142705360 B站教学视频:https://www.bilibili.com/video/BV1Kb4FeME9R/ MEMS-...
《3ds Luma3DSv9.1:深入解析与应用》 3ds Luma3DSv9.1是一款专为3DS掌上游戏机设计的自制系统固件,它为用户提供了对3DS硬件的高级自定义和扩展功能。Luma3DS是3DS社区中的一个重要组件,尤其对于那些寻求个性化...
DHL Group、CMA CGM、Maersk、DB Schenker、DSV Panalpina、Ryder System、Kerry Logistics Network、XPO Logistics、Penske Logistics、Expeditors和Bollore Logistics等企业是汽车供应链管理解决方案的主要提供商...
根据2023年的调研数据,全球范围内汽车供应链管理解决方案的主要生产商包括DHL Group、CMA CGM、Maersk、DB Schenker、DSV Panalpina、Ryder System、Kerry Logistics Network、XPO Logistics、Penske Logistics、...
根据2023年的调研数据,全球范围内汽车供应链管理解决方案的主要生产商包括DHL Group、CMA CGM、Maersk、DB Schenker、DSV Panalpina、Ryder System、Kerry Logistics Network、XPO Logistics、Penske Logistics、...
Luma3DS is a program to patch the system software of (New) Nintendo 3DS handheld consoles "on the fly", adding features (such as per-game language settings and debugging capabilities for developers) ...
DSV型带式输送机是一种广泛应用在矿山、冶金、港口、电力、化工等多个行业的物料输送设备。它以其高效、连续、可靠的特点,成为了现代工业生产中的重要组成部分。本压缩包包含的是关于DSV型带式输送机的详细资料,...
陀螺仪LSM6DSV16X与AI集成(11)----融合磁力计进行姿态解算 CSDN文字教程:https://blog.csdn.net/qq_24312945/article/details/141576430 B站教学视频:https://www.bilibili.com/video/BV1oTsJeTErb/ MotionFX库...
Step7 分布式组态软件驱动,在使用ET200S分布式网络时使用
这个设计书不仅提供了一套完整的DSV型带式输送机设计方案,也是对毕业生实践能力和理论知识的综合检验。学生在设计过程中将深入理解机械传动、流体力学、材料科学等相关领域知识,并锻炼解决问题和团队协作的能力。 ...
3ds破解做b9用的luma3dsv8.1.1,不能用于a9系统。支持系统11.6以下都可以。
通过DSV型带式输送机的设计实践,学生不仅能掌握机械设计的基本技能,还能了解到工程实际中的一些问题和解决方案,对未来的工程职业发展有着重要的指导意义。这个毕业设计不仅涵盖了机械设计的基础知识,也锻炼了...
### 构造游戏世界PDF——探索精彩电脑游戏的制作奥秘 #### 一、书籍简介 《构造游戏世界》是一本深入浅出介绍电脑游戏设计与开发的专业书籍。该书由资深游戏制作人及设计师Tom Meigs撰写,以其在电子游戏领域超过...
DSV2016Client客户端免费下载