Rails time_zone_select未显示夏令时(DST),如何设置正确时区?
嘿,这个问题我之前做项目时也纠结过,来给你好好讲讲~
先给你吃个定心丸:默认显示其实是合理的设计
Rails的time_zone_select默认展示的是时区的标准时间标识,比如你看到的(GMT+00:00) London,这背后对应的是Europe/London这个完整的时区标识符。为什么这么设计?因为时区本质是一套包含夏令时切换规则的地理时间体系,而不是某个固定的偏移量。只要后台存储的是Europe/London这类完整标识符,应用在处理日期时间时,会自动根据具体时间点判断是否启用夏令时,最终的日期显示肯定是准确的——哪怕选择框里没显示BST,实际计算时不会出错。
想要显示夏令时别名?Rails有现成参数
如果就是想让选择框在夏令时期间直观显示BST和实际偏移,只需要给time_zone_select加上show_current_offset: true参数就行:
<%= f.time_zone_select :timezone, show_current_offset: true %>
加上这个参数后,夏令时期间London时区会显示成(GMT+01:00) London (British Summer Time),非夏令时则显示(GMT+00:00) London (Greenwich Mean Time),完全跟着当前时间动态变化。
最后再强调下:不管选择框怎么展示,核心是要确保存储的是完整的时区标识符(比如Europe/London),而不是单纯的偏移量(比如GMT+00:00),这样才能保证所有日期时间处理都能正确适配夏令时规则。
内容的提问来源于stack exchange,提问作者Cameron
相关产品推荐
相关产品推荐

