MySQL中的时区
显示时区信息
- mysql>showvariableslike'%time_zone%';
- +------------------+--------+
- |Variable_name|Value|
- +------------------+--------+
- |system_time_zone|CST|
- |time_zone|SYSTEM|
- +------------------+--------+
- 2rowsinset(0.00sec)
设置时区信息
+8:00是中国所在的时区,东八区。
- mysql>settime_zone='+8:00';
- QueryOK,0rowsaffected(0.00sec)
Rails中的时区
rails默认就是写入utc时间,然后读取也是utc时间。
设置config.time_zone只能保证写入数据库的时间是local,就是保证创建对象的时候created_at和updated_at使用设置的本地时间。
但是读出来的时候还是有可能是utc时间,有可能需要在界面上转换的。
rails推荐使用utc时间,这样就统一了,只是在界面显示的时候格式化为本地时间。
- raketime:zones:all#查看所有时区
- raketime:zones:local#查看本地时区
默认情况
我们使用
- railsg scaffold posttitle:stringcontent:string
生成一个model之后,打开【db/migrate/201200_create_posts.rb】文件看到下面的内容。
- classCreatePosts<ActiveRecord::Migration
- defchange
- create_table:postsdo|t|
- t.string:title
- t.string:content
- t.timestamps
- end
- end
- end
t.timestamps会帮我们在数据库中生成created_at和updated_at两个字段,这两个字段rails会自动赋值不用我们手动指定。
在界面上添加post之后,打开log/production.log文件,会看到下面的内容。
- INSERTINTO`posts`(`category_id`,`content`,`created_at`,`picture`,`published`,`title`,`updated_at`,`url`)VALUES(1,'post100','2012-11-0105:13:45',NULL,0,'post100','2012-11-0105:13:45','post100')
如果没有看到这条sql语句,那么就是在config/applicaiton.rb中添加
- config.log_level=debug
debug的级别会在日志中记录每个sql,方便调试。在发布到生产环境之后,修改这个级别信息。
请注意created_at的值,明明是中国时间中午插入的记录,但是insert语句中的时间却是utc时间,落后八个小时,因为中国是东八区+8:00。
插入数据库的值自然也就是这个utc时间。
设置时区之后
解决这个问题可以在config/application.rb文件中添加下面的配置。
- config.active_record.default_timezone=:local
- config.time_zone='Beijing'
再次插入数据,打开log文件,就会发现时间变成了北京时间,插入数据库的也是北京时间。进入mysql -u root -p之后,查询的结果也是北京时间。
在view文件中使用
- <%=created_at%>
显示的结果是
- 2012-11-0113:39:26+0800
是没有问题的,但是多了时区+0800信息。
要是使用
- <%=post.updated_at.to_s(:db)%>
显示的结果就是
- 2012-11-0105:39:26
没有了+0800,但是时间又变成了utc时间了。
使用
- <%=post.updated_at.localtime.to_s(:db)%>
就变成
- 2012-11-0113:39:26
这下没有时区+0800信息,时间也是本地时间了。就是先转换为本地时间,然后在进行格式化。
- created_at.utc #转换为utc时间
- created_at.localtime #转换为local时间
还有就是在rails console中有一点特别。
- 1.9.3-p286:013>p=Post.last
- PostLoad(0.3ms)SELECT`posts`.*FROM`posts`ORDERBY`posts`.`id`DESCLIMIT1
- =>#<Postid:67,title:"发郭德纲的法国队",content:"asdfasdf",created_at:"2012-11-0105:39:26",updated_at:"2012-11-0105:39:26",url:"df",category_id:1,published:false,picture:nil>
- 1.9.3-p286:014>p.created_at
- =>Thu,01Nov201213:39:26CST+08:00
大家注意到了吗,在p=Post.last之后查询的结果显示created_at的时间是utc时间,但是等你敲入p.created_at之后,显示的值就变成了本地时间。
总结
时区以及日期的格式化是每个程序员的必修课,就像字符串的各种处理一样重要,而且使用频率很高。
rails默认就是写入utc时间,然后读取也是utc时间。
设置config.time_zone只能保证写入数据库的时间是local,就是保证创建对象的时候created_at和updated_at使用设置的本地时间。
但是读出来的时候还是有可能是utc时间,有可能需要在界面上转换的。
rails推荐使用utc时间,这样就统一了,只是在界面显示的时候格式化为本地时间。
对于任何应用来说,遇到时区问题,都应该考虑语言本身和存储本身,甚至是操作系统本身的时区设置和一些默认值,这样才能最终较好的解决时区问题。
参考文献
1.Convert local time to UTC in Rails
2.Rails 3 default datetime format without UTC
3.rails 有关时区的设置的问题
4.Date Time Format in RUBY
5.rails time format
6.完美解决rails中国时区时间设置
7.Time Zones in Rails 2.1
8.MySQL时区设置
9.Rails内置的时间格式化
本文出自 “突破中的IT结构师” 博客,请务必保留此出处http://virusswb.blog.51cto.com/115214/1046723
相关推荐
在 Ruby on Rails 上运行的实时聊天。 本次聊天使用: MySQL 和 ActiveRecord Javascript、Jquery 和 ajax 调用Ruby 2.1 导轨 4 css3 html5 陷阱: 此应用程序不使用迁移、数据库种子、复杂的会话、表单助手等。 ...
当前支持:Amazon S3,Apache,Delayed :: Job,Merb,Mysql,PostgreSQL,Rack,Rails等。 合并多个文件并解压缩压缩文件,如果您使用logrotate,这将非常方便。 使用几个指标,包括累积请求时间,平均请求时间,...
部署Rails应用程序的所有程序包和操作 ============================================ 预计时间〜40分钟 该教程与一起使用服务器 登录并创建一个droplet Ubuntu 16.04x64 1GB CPU和30GB磁盘 ssh root@xxx.xxx.xx ...
Ruby on Rails博客应用程序,RESTful API执行以下...mysql数据库,Sidekiq和Redis(安排删除后的时间) 首先创建用户User.create(名称:“ test”,电子邮件:“ ”,密码:123456,password_confirmation:123456)
一个简单的 Ruby on Rails 应用程序,用于在中央时间线进行消息传递 DBCONSOLE 您可以通过rails dbconsole直接进入数据库的命令行。 您将使用 database.yml 中定义的凭据连接到数据库。 启动不带参数的脚本会将您...
POTATO是一种开发人员工具,可避免浏览JIRA问题所需的多次单击。 它从GitHub和JIRA提取数据,以生成一份待完成的工作项目清单以及它们的紧迫性。 目标是为JIRA制作Atlassian仪表板小工具。 目前,它可以作为Rails ...
您可以注册最方便的日期顶部屏幕新注册画面个人资料图片预览实现登入画面讲师列表画面讲师注册画面讲师信息详细画面我的页面网站网址http://13.112.152.26/ 基本认证用户名admin密码0322版本信息Ruby 2.5.1版Ruby on...
每天随着时间流逝。自27岁起,我每天都会写日记。因此,我现在意识到了日常生活中的每一天。生活的幸福会根据您是否意识到目标而有很大的变化,而不论目标的大小。在日常生活中面对一些目标并管理任务。它是一个您...
此类用于以下情况:(1)您想使用数据库中的单个文本字段来存储营业时间,并且(2)您希望能够检查商店是否在特定时间营业,或确保输入有效,或以不同于用户输入的格式显示小时(例如,以html格式设置输入以在网站...
密码:test01できること画像の投稿右上のNew Shareから记事の投稿コメントの投稿记事详细画面から,下のコメントフォームでコメントタグ别,カテゴリ别表示要求苹果系统RubyRuby on Rails MySQL 码头工人VScode...
该文档来自MDCC2013中国移动开发者大会上,英语流利说联合创始人、CEO王翌关于“英语流利说接入微信和易信平台的一点体会”的主题演讲。英语流利说应用的特点:强...流利说微信应用在后端使用了Ruby on Rails+MySQL。
Ruby 2.5.1 Ruby on Rails 5.4.2 MySQL的14.14 Github AWS(EC2,S3) Capistrano自动部署Visual Studio程式码 开发周期和平均工作时间 开发时间:约4周每天平均工作时间:大约9小时开发系统人数:4敏捷类型
第1部分:Python + Python OOP 安装 基本原理: 花2天的时间学习语法。... 花两天的时间学习有关MySQL(一种常用的关系数据库)的信息。 学习创建数据库的可视化表示。 使用数据库创建和管理软件来制定SQL查询。
这是在Ruby on Rails中重写的scala版本的端口。 后视镜在LivingSocial的生产中已经运行了一年多。 转到查看后视的更详细概述要求JVM 1.6+ jruby 1.7.5+ Ruby经理(rvm或rbenv) 石墨mysql / postgresql(或其他受...
诸如React、Angular、Vue等现代化的前端框架,以及Node.js、Ruby on Rails、Django等后端框架,能够提供稳定、快速、高效的开发环境。 另外,外卖系统处理大量数据,因此数据存储和数据库管理至关重要。使用可扩展...
为了解决这些问题,我们将创建一个具有以下功能的Web服务。 创建一个输入信息的地方以学习如何计时攻击 创建评论页面 创建一个地方以输出时间攻击的结果 创建排名页面 创建工具以辅助时间攻击并支持分销商 交货搜索...
软考视频 | 考试机构 | 考试时间安排 Java一览无余:Java视频教程 | Java SE | Java EE .Net技术精品资料下载汇总:ASP.NET篇 .Net技术精品资料下载汇总:C#语言篇 .Net技术精品资料下载汇总:VB.NET篇 撼世...
1. 数据库技术:为了存储和管理大量的毕业生就业数据,可能会使用如MySQL、PostgreSQL或MongoDB等数据库系统。 2. 数据处理与分析:可能会采用数据分析工具如Python(利用Pandas、NumPy库)、R语言或SPSS来处理数据...
很棒的Crystal库,工具... timecop.cr-使用Time.now模拟时间旅行,时间冻结和时间刻度的功能。 webmock.cr-模拟HTTP :: Client TOML解析 crystal-toml-用于水晶的TOML解析器 Web框架 Amatista-受Rails启发的框架 Ame
Ruby on Rails MySql JavaScript github や前置実装したい机能 细かい时间ごとのシフト提出提出,及び作成ができるようにしたいと考えています。 テーブル设计 用户テーブル 柱 类型 选件 名称 串 nu