timezone

new dateformat() ,生成的dateformat 默认时区为 web application server 中设定时区

关于dateformat时区设置参见另外一篇liferay中时区处理

-----------------------------------------------------------------------------
mysql 时区设置

MySQL服务器有几个时区 http://hi.baidu.com/longhtml/item/efd64e0c1d0bec103a53ee58
(1) 系统时区
服务器启动时便试图确定主机的时区,用它来设置system_time_zone系统变量。

(2) 服务器当前的时区
全局系统变量time_zone表示服务器当前使用的时区。初使值为'SYSTEM',说明服务器时区与系统时区相同。可以用--default-time-zone=timezone选项显式指定初使值。
如果你有SUPER 权限,可以用下面的语句在运行时设置全局变量值
mysql> SET GLOBAL time_zone = timezone;

(3)每个连接的时区
每个客户端连接有自己的时区设置,用会话time_zone变量给出。其初使值与全局变量time_zone相同,但可以用下面的语句重设:
mysql> SET time_zone = timezone;

可以用下面的方法查询当前的全局变量值和每个连接的时区:
mysql> SELECT @@global.time_zone, @@session.time_zone;
查询结果:system system

查询DB服务器时间
mysql> select now(), utc_time();
例如db服务器时区 GMT+9, 时间 2013-01-06 14:20:46
查询结果: 2013-01-06 14:20:46 05:20:46


修改系统时区后重启mysql, 此时mysql会主动读取系统时间, mysql的时区跟随系统时区变化。
或者更改mysql的配置文件(mysql.cnf), 在my.cnf的 [mysqld]区域中加上default-time_zone = '+8:00' eg: GMT+8 。
-----------------------------------------------------------------------------
tomcat 时区设置
默认时区GMT

TOMCAT系统时间设定方法 http://qq396151722.iteye.com/blog/1488372
一、有catalina.bat和setenv.bat时候,
方法一(也是最简单的设置方式):编辑setenv.bat 把-Duser.timezone=GMT 改成-Duser.timezone=GMT+8

方法二:编辑catalina.bat ,搜索 set JAVA_OPTS=%JAVA_OPTS%,把这句话改成set JAVA_OPTS=%JAVA_OPTS% -Duser.timezone=GMT+8

如果方法一中设置好后,又采用方法二中的设置,则执行方法二中的设置。因为方法二的设置覆盖了方法一的设置。Catalina.bat是tomcat所有脚本中最重要的脚本,完成几乎所有的tomcat操作。如启动,关闭等等,都是由catalina.bat脚本来完成的。

猜想:如果方法二覆盖了方法一,那么方法二的语句一定是执行在方法一之后。

验证猜想:编辑catalina.bat,CTRL+F查找 setenv.bat ,找到这样一句话if exist "�TALINA_BASE%\bin\setenv.bat" call "�TALINA_BASE%\bin\setenv.bat" ,写在95行,这就是方法一,118行就是方法二。

二、在安装版的tomcat中,启动tomcat6W,在弹出框中选择Java,在Java Opinions中加入如下信息:

-Dfile.encoding=GBK
-Duser.timezone=GMT+8

--------------------------------------------------
liferay区域设置
用户区域设置:控制面板-〉用户(/我的帐户)-〉显示设置-〉时区

http://www.permeance.com.au/web/terry.mueller/home/-/blogs/how-to-use-time-zones-with-liferay-portal
--------------------------------------------------

<think>我们正在讨论时区(Timezone)相关的信息。根据引用内容,我们可以从Java中的TimeZone类、muduo库中的TimeZone实现,以及Flutter时区插件适配等方面来展开。 用户要求查询关于Timezone的相关信息,因此我将综合引用内容,提供关于时区的基本概念、处理方式以及在编程中的使用。 主要内容包括: 1. 时区的基本概念和重要性 2. Java中时区处理(TimeZone类,Date, Calendar, SimpleDateFormat) 3. muduo库中TimeZone的实现细节(主要关注时区转换) 4. 跨平台时区处理(如Flutter时区插件适配鸿蒙系统) 注意:引用内容中并没有提供完整的时区基础介绍,但我们可以结合已知引用和常识进行回答。 由于引用[1]和[2]主要涉及Java的TimeZone,引用[3]是muduo库中TimeZone的实现,引用[4]是关于Flutter时区适配鸿蒙,因此我们将重点放在Java和C++的时区处理上,并简要提及跨平台适配。 我们将按照以下结构回答: 一、时区的定义和作用 二、Java中的时区处理 1. TimeZone类 2. Date、Calendar和SimpleDateFormat的使用 三、C++中的时区处理(以muduo库为例) 四、跨平台时区处理(Flutter时区插件适配鸿蒙) 五、时区处理中的常见问题与注意事项 最后,生成相关问题。 注意:引用标识要自然添加在相关内容的末尾。 </think>### 时区(Timezone)核心概念与实现详解 时区是协调世界时(UTC)与本地时间偏移量的规则体系,包含标准时间、夏令时切换策略及历史变更记录。以下结合引用内容解析关键技术点: --- #### 一、时区核心组成 1. **偏移量(Offset)** - GMT/UTC与本地时间的固定差值 - Java中通过 `TimeZone.getRawOffset()` 获取(单位:毫秒)[^1] - 示例: - 纽约时区:`-18000000 ms`(UTC-5) - 北京时区:`28800000 ms`(UTC+8) 2. **标识符(ID)** - 标准格式:`区域/城市`(如 `Asia/Shanghai`) - 自定义时区:通过 `TimeZone.setDefault()` 动态设置[^2] 3. **转换规则(Transition)** - 定义时区切换点(如夏令时起止)[^3]: ```c++ struct Transition { time_t gmttime; // UTC时间戳 time_t localtime; // 转换后的本地时间 int localtimeIdx; // 关联的本地时间规则索引 }; ``` --- #### 二、时区处理关键技术 ##### 1. **Java时区操作** ```java // 获取当前默认时区 TimeZone tz = TimeZone.getDefault(); // 计算北京时间与UTC的固定偏移 int offset = TimeZone.getTimeZone("Asia/Shanghai").getRawOffset(); // +28800000 ms // 动态设置自定义时区 TimeZone customTz = TimeZone.getTimeZone("GMT+3:00"); TimeZone.setDefault(customTz); ``` ##### 2. **C++时区转换(muduo实现)** - **本地时间结构**:存储偏移量与夏令时标记[^3] ```c++ struct Localtime { time_t gmtOffset; // UTC→本地时间的修正值 bool isDst; // 夏令时标志 int arrbIdx; // 时区名称索引 }; ``` - **关键算法**: - `findLocaltime()`:二分查找匹配的时区规则 - `fillHMS()`:将秒数转换为 `tm` 结构的时间表示 ##### 3. **跨平台时区适配(Flutter→鸿蒙)** - **核心挑战**:鸿蒙系统无原生时区API → 需实现桥接层 - **解决方案**[^4]: - 通过鸿蒙的 `@ohos.systemDateTime` 模块获取时区 - 封装为Dart插件 `flutter_timezone` 的统一接口 --- #### 三、时区使用典型问题 1. **偏移量计算错误** - 未区分标准时与夏令时(如 `getRawOffset()` 忽略夏令时修正) 2. **时区标识符不兼容** - Windows使用 `China Standard Time`,Linux使用 `Asia/Shanghai` 3. **跨时区序列化问题** - 时间戳存储必须附带时区ID,否则反序列化时可能偏移 --- #### 四、最佳实践建议 1. **服务端**: - 统一使用UTC时间存储与传输 - 时区信息单独存储为IANA格式(如 `Asia/Tokyo`) 2. **客户端**: - 自动获取系统时区:`TimeZone.getDefault()`(Java) / `TimeZone.system`(Dart) - 提供手动覆盖接口(如 `TimeZone.setDefault()`) 3. **全球化应用**: - 使用ICU库处理复杂时区规则(如历史变更) > **关键原则**:时间戳(timestamp)**绝对时区无关**,人类可读时间(human-readable)**必须关联时区**[^1][^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值