今天遇到一个问题,就是在Ruby中对于Time和DateTime的使用,不是很明了,现在研究一下:

先说Time: 在Ruby2.0中关于Time有两处定义一个是在Core中,http://www.ruby-doc.org/core-2.0.0/Time.html,一个是在stdlib中,先说在核心模块中的Time。http://www.ruby-doc.org/stdlib-2.0.0/libdoc/time/rdoc/Time.html 后者是对前者的扩展。

Time是对日期和时间的一个抽象,其实内部保存的是从1970年1月1日到现在的时间差。

下面通过Time的类方法的例子熟悉一下Time如何创建一个Time实例:

  • ::new

先看一下::new方法的的定义:

new → time
new(year, month=nil, day=nil, hour=nil, min=nil, sec=nil, utc_offset=nil) → time

可以通过new方法来根据系统时间创建一个Time实例,就是没有参数的情况对应new → time:

 puts Time.new 

输出结果:

 2013-11-27 00:04:28 +0800

也可以在通过::new来创建实例的时候,指定时间的一部分,例如年,月,日等信息,对应new(year, month=nil, day=nil, hour=nil, min=nil, sec=nil, utc_offset=nil) → time,通过这种方式来创建Time实例的时候必须要传递参数year。如下:

 puts Time.new(2002)
puts Time.new(2002, 10)
puts Time.new(2002, 10, 31)
puts Time.new(2002, 10, 31, 2, 2, 2, "+02:00")

输出结果:

 2002-01-01 00:00:00 +0800
2002-10-01 00:00:00 +0800
2002-10-31 00:00:00 +0800
2002-10-31 02:02:02 +0200

这里面比较有意思的事情就是在创建Time实例的时候就可以制定时区,很方便。其实也可以通过Time的gm.local,utc方法来制定时区。下面做一下介绍.

  • ::gm

看一下::gm的定义:

 gm(year) → time
gm(year, month) → time
gm(year, month, day) → time
gm(year, month, day, hour) → time
gm(year, month, day, hour, min) → time
gm(year, month, day, hour, min, sec_with_frac) → time
gm(year, month, day, hour, min, sec, usec_with_frac) → time
gm(sec, min, hour, day, month, year, wday, yday, isdst, tz) → time

gm的重载比new多一些,但是看起来也很好理解,同样需要year的信息是必须填写的,剩下的就是一些小的细节比如月份的数值必须是1..12,小时的数值必须是0..23,所以就不逐一举例。只是举个例子来说明一下它的作用:

 puts Time.utc(2000,"jan",1,20,15,1)
puts Time.gm(2000,"jan",1,20,15,1)

输出结果:

 2000-01-01 20:15:01 UTC
2000-01-01 20:15:01 UTC
  • ::utc

和gm一样。

  • ::local

出了时区有差别,其他和gm一样,看个例子:

 puts Time.local(2000,"jan",1,20,15,1)

输出结果:

 2000-01-01 20:15:01 +0800
  • ::now

是new的别名,也是根据当前系统时间来初始化一个时间实例。

  • ::mktime

同local

获取到Time实例以后就看看我们能用这些实例做点什么吧:

前面已经提到Time其实就是保存的从1970年1月1号到现在的时间差,单位为秒,如此说来我们做时间运算应该比较简单,下面通过Time实例方法的两个列子,Ruby的时间操作简单到令人发指:

首先我们试想一下既然Time实例中存放的是一个时间差,那么我们对它进行加减法操作就会按照我们预期的设想得到结果。看这个例子:

 puts t = Time.now
puts t1 = t + (60 * 60 * 24)

输出结果:

 2013-11-27 00:47:25 +0800
2013-11-28 00:47:25 +0800

简单暴力。减法同理。

Ruby Time And DateTime之Time in Core的更多相关文章

  1. EntityFramework Core 2.0 Explicitly Compiled Query(显式编译查询)

    前言 EntityFramework Core 2.0引入了显式编译查询,在查询数据时预先编译好LINQ查询便于在请求数据时能够立即响应.显式编译查询提供了高可用场景,通过使用显式编译的查询可以提高查 ...

  2. .Net使用Redis详解之ServiceStack.Redis(七)

    序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...

  3. Watir资源列表【转】

    Watir简介 "Watir" (发音与 water相近) 全写是 "Web Application Testing in Ruby".Watir是一款用Rub ...

  4. sonarQube本机扫描C#项目

    因项目需要,需要使用sonarQube对代码进行扫描并查看,因对sonarQube不熟悉,所以先在本机进行查看. 参考了张老师的博客:http://www.cnblogs.com/danzhang/p ...

  5. C#中使用ServiceStack.Redis

    .Net操作Redis数据类型String public class DoRedisString : DoRedisBase { #region 赋值 /// <summary> /// ...

  6. C# Redis之ServiceStack

    前面几篇博客基本把redis基本操作学习了下,但一些高级应用并没有写进博客,例如持久化.虚拟内存等,像这些主要是通过配置文件来解决的,运维方向可能更侧重一些,对于开发者来说,可能就想知道怎么用C#来和 ...

  7. .Net使用Redis详解之ServiceStack.Redis(七) 转载https://www.cnblogs.com/knowledgesea/p/5032101.html

    .Net使用Redis详解之ServiceStack.Redis(七)   序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现 ...

  8. .Net使用Redis详解之ServiceStack.Redis

    序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...

  9. .Net使用Redis详解之ServiceStack.Redis(7)

    Net使用Redis详解之ServiceStack.Redis(七) 序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中 ...

随机推荐

  1. 洛谷P1540 机器翻译

    题目链接:https://www.luogu.org/problemnew/show/P1540

  2. Centos7 使用 Supervisor 守护进程 Celery

    一.Supervisor 安装(centos7 还有另一个进程守护命令 Systemd ) Centos 7 安装 Supervisord 二.Supervisor 守护进程 Centos7 使用 S ...

  3. Event log c++ sample.

    1. Init regedit. bool InitLog( TCHAR *logName, TCHAR *sourceName, TCHAR *MessageDllName ) { // This ...

  4. cf975d Ghosts

    ref #include <algorithm> #include <iostream> #include <cstdio> #include <map> ...

  5. 使用 SpiritManager 类管理在 XNA 游戏中的精灵(十四)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  6. Python基础-week03 集合 , 文件操作 和 函数详解

    一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...

  7. CSU-1908 The Big Escape

    CSU-1908 The Big Escape Description There is a tree-like prison. Expect the root node, each node has ...

  8. CSU-2172 买一送一

    CSU-2172 买一送一 Description ICPCCamp 有 n 个商店,用 1, 2, -, n 编号.对于任意 i > 1,有从商店 \(p_i\) 到 i 的单向道路. 同时, ...

  9. 【转】Unity3D 入门小技巧——鼠标拾取并移动物体

    http://blog.csdn.net/sysujackjiao/article/details/69396274 一.鼠标拾取物体的原理 在Unity3D当中,想要在观察面(Aspect)中拾取物 ...

  10. BZOJ2194 快速傅立叶之二 【fft】

    题目 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非负整数. 输入格式 ...