多时区
ZKWeb内置提供了多时区支持, 可以让不同的客户端显示不同的时间.
设置当前线程的时区
设置指定时区:
LocaleUtils.SetThreadTimezone("Asia/Shanghai");
自动设置时区(Cookies => 默认时区):
LocaleUtils.SetThreadTimezoneAutomatic("America/New_York");
更多支持的时区可以查看源代码
根据时区转换时间
转换到客户端的本地时间, ToClientTime
是一个扩展函数.
如果客户端指定了时区则使用该时区, 否则使用服务器本地时间.
var utcTime = DateTime.UtcNow; var clientTime = utcTime.ToClientTime();
从客户端时间转换到utc时间, 常用于解析客户端的时间控件提交的值.
var clientTime = DateTime.Parse(timeParam); var utcTime = clientTime.FromClientTime();
数据库中保存的时间
如果需要使用多时区支持, 请在数据库中保存UTC时间,
例如获取当前时间使用DateTime.UtcNow
而不是DateTime.Now
.
从数据库取出的时间应该使用ToClientTime
转换后发给客户端.
从客户端接收的时间应该使用FromClientTime
转换后保存到数据库.