在Ruby中处理日期和时间的教程_ruby专题

Time 类在 Ruby 中用于表示日期和时间。它是基于操作系统提供的系统日期和时间之上。该类可能无法表示 1970 年之前或者 2038 年之后的日期。

本教程将让您熟悉日期和时间的所有重要的概念。
创建当前的日期和时间

下面是获取当前的日期和时间的简单实例:

#!/usr/bin/ruby -w

time1 = Time.new

puts "Current Time : " + time1.inspect

# Time.now 是一个同义词
time2 = Time.now
puts "Current Time : " + time2.inspect

这将产生以下结果:

Current Time : Mon Jun 02 12:02:39 -0700 2008
Current Time : Mon Jun 02 12:02:39 -0700 2008

获取 Date & Time 组件

我们可以使用 Time 对象来获取各种日期和时间的组件。请看下面的实例:

#!/usr/bin/ruby -w

time = Time.new

# Time 的组件
puts "Current Time : " + time.inspect
puts time.year  # => 日期的年份
puts time.month  # => 日期的月份(1 到 12)
puts time.day   # => 一个月中的第几天(1 到 31)
puts time.wday  # => 一周中的星期几(0 是星期日)
puts time.yday  # => 365:一年中的第几天
puts time.hour  # => 23:24 小时制
puts time.min   # => 59
puts time.sec   # => 59
puts time.usec  # => 999999:微秒
puts time.zone  # => "UTC":时区名称

这将产生以下结果:

Current Time : Mon Jun 02 12:03:08 -0700 2008
2008
6
2
1
154
12
3
8
247476
UTC

Time.utc、Time.gm 和 Time.local 函数

这些函数可用于格式化标准格式的日期,如下所示:

# July 8, 2008
Time.local(2008, 7, 8)
# July 8, 2008, 09:10am,本地时间
Time.local(2008, 7, 8, 9, 10)
# July 8, 2008, 09:10 UTC
Time.utc(2008, 7, 8, 9, 10)
# July 8, 2008, 09:10:11 GMT (与 UTC 相同)
Time.gm(2008, 7, 8, 9, 10, 11)

下面的实例在数组中获取所有的组件:
[sec,min,hour,day,month,year,wday,yday,isdst,zone]

尝试下面的实例:

#!/usr/bin/ruby -w

time = Time.new

values = time.to_a
p values

这将产生以下结果:

[26, 10, 12, 2, 6, 2008, 1, 154, false, "MST"]

该数组可被传到 Time.utc 或 Time.local 函数来获取日期的不同格式,如下所示:

#!/usr/bin/ruby -w

time = Time.new

values = time.to_a
puts Time.utc(*values)

这将产生以下结果:

Mon Jun 02 12:15:36 UTC 2008

下面是获取时间的方式,从纪元以来的秒数(平台相关):

# 返回从纪元以来的秒数
time = Time.now.to_i 

# 把秒数转换为 Time 对象
Time.at(time)

# 返回从纪元以来的秒数,包含微妙
time = Time.now.to_f

时区和夏令时

您可以使用 Time 对象来获取与时区和夏令时有关的所有信息,如下所示:

time = Time.new

# 这里是解释
time.zone    # => "UTC":返回时区
time.utc_offset # => 0:UTC 是相对于 UTC 的 0 秒偏移
time.zone    # => "PST"(或其他时区)
time.isdst   # => false:如果 UTC 没有 DST(夏令时)
time.utc?    # => true:如果在 UTC 时区
time.localtime # 转换为本地时区
time.gmtime   # 转换回 UTC
time.getlocal  # 返回本地区中的一个新的 Time 对象
time.getutc   # 返回 UTC 中的一个新的 Time 对象

格式化时间和日期

有多种方式格式化日期和时间。下面的实例演示了其中一部分:

#!/usr/bin/ruby -w
time = Time.new

puts time.to_s
puts time.ctime
puts time.localtime
puts time.strftime("%Y-%m-%d %H:%M:%S")

这将产生以下结果:

Mon Jun 02 12:35:19 -0700 2008
Mon Jun 2 12:35:19 2008
Mon Jun 02 12:35:19 -0700 2008
2008-06-02 12:35:19

时间格式化指令

下表所列出的指令与方法 Time.strftime 一起使用。

时间算法

您可以用时间做一些简单的算术,如下所示:

now = Time.now      # 当前时间
puts now

past = now - 10     # 10 秒之前。Time - number => Time
puts past

future = now + 10    # 从现在开始 10 秒之后。Time + number => Time
puts future

diff = future - now   # => 10 Time - Time => 秒数
puts diff

这将产生以下结果:

Thu Aug 01 20:57:05 -0700 2013
Thu Aug 01 20:56:55 -0700 2013
Thu Aug 01 20:57:15 -0700 2013
10.0

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ruby
ruby 字符串转日期、ruby 日期计算、ruby日期、ruby日期格式化、ruby 日期加减,以便于您获取更多的相关知识。

时间: 2024-08-01 13:32:23

在Ruby中处理日期和时间的教程_ruby专题的相关文章

Ruby中的循环语句的用法教程_ruby专题

 Ruby中的循环用于执行相同的代码块指定的次数.本章将详细介绍Ruby支持的循环语句.Ruby while 语句:语法: while conditional [do]    code end 执行代码当条件为true时.while循环的条件是代码中的保留字,换行,反斜杠(\)或一个分号隔开. 实例: #!/usr/bin/ruby $i = 0 $num = 5 while $i < $num do puts("Inside the loop i = #$i" ) $i +=1

Ruby中的block代码块学习教程_ruby专题

1.什么是代码块在Ruby中,{}或do...end之间的代码是一个代码块.代码块只能出现在一个方法的后边,它紧接在方法最后一个参数的同一行上,由yield关键字调用.例如: [1,2,3,4,5].each { |i| puts i } [1,2,3,4,5].each do |i| puts i end 块变量:以yield关键字调用block也可以传递参数,block中竖线(|)之间给出的参数名用于接收来自yield的参数.  竖线之间(如上例中的 | i |)的变量被称作块变量,作用和一

在Python的Flask框架中使用日期和时间的教程

  这篇文章主要介绍了在Python的Flask框架中使用日期和时间的教程,包括对各个时区之间转换的一些处理,需要的朋友可以参考下 时间戳的问题 我们的微博应用的一个忽略了很久的问题就是日间和日期的显示. 直到现在,我们在我们的User和Post对象中使用Python它自己的方式来渲染时间对象,但这并不是一个好的解决方案. 考虑下这样的例子.我正在写这篇文章,此时正是12月31号下午3:54.我的时区是PST(或者你们更习惯的:UTC-8). 在Python解释器中运行,我得到下面输出: ? 1

Ruby中Time对象的常用函数总结_ruby专题

时间对象. Time.now返回当前时间. 1.Time.at Time.at(time[, usec]) 返回time所指时间的Time对象. time可以是Time对象,也可以是表示自起算时间以来的秒数的整数或浮点数. 若浮点精度不够时,可以使用usec. 它将返回time +(usec/1000000)所表示的时间. 此时,time和usec都必需是整数. 生成的Time对象将使用地方时的时区. 2.Time.gm.Time.utc Time.gm(year[, mon[, day[, h

Ruby中操作字符串的一些基本方法_ruby专题

 在Ruby中的String对象持有和操纵的任意序列的一个或多个字节,通常表示人类语言的字符表示. 简单的字符串文本括在单引号(单引号字符).引号内的文本的字符串值: 'This is a simple Ruby string literal' 如果需要内放置一个单引号,单引号的字符串文字,在它前面加上一个反斜杠Ruby解释器不认为终止字符串: 'Won\'t you read O\'Reilly\'s book?' 反斜杠也可以转义另一个反斜杠,这样第二个反斜杠本身不是解释为转义字符. 以下是

Ruby中使用连续体Continuation实现生成器_ruby专题

ruby中有很多经典的驱动器结构,比如枚举器和生成器等.这次简单介绍下生成器的概念.生成器是按照功能要求,一次产生一个对象,或称之为生成一个对象的方法.ruby中的连续体正好可以用来完成生成器的功能.连续体说起来晦涩,其实还是很简单的,它有3个特点: 1. callcc方法会给代码块传一个连续体对象,你可以保存该对象; 2. 当调用连续体的call方法时指令流会跳转到callcc方法之后; 3. 如果给连续体的call方法传递对象,则callcc方法会返回该对象,如果不传递对象,callcc会返

Ruby中Block和迭代器的使用讲解_ruby专题

我们来简单地描述Ruby的一个独特特性.Block,一种可以和方法调用相关联的代码块,几乎就像参数一样.这是一个不可思议的功能强大的特性. 可以用Block实现回调(但它比Java的匿名内部(anonymous inner)类更简单),传递一组代码(但它远比c的函数指针灵活),以及实现迭代器. Block只是在花括号或者do...end之间的一组代码. {puts "Hello"} #this is a block do ### club.enroll(person) #and so

Ruby中关于模块的一些基础知识_ruby专题

模块与类很相似,它也可以说成是"不能被实例化的类".由于Class类是Module类的子类,所以说成是"类=模块+实例化能力"也许更好. 所谓模块,究竟是用来干什么的呢?其作用主要有两大类:Mix-in和命名空间. Mix-in实际上是受限制的多重继承.利用实际做成的继承关系,可以实现对某些类进行一些"点缀"的目的.事实上,Mix-in这种说法就来自于在冰激凌上面的饼干或者坚果. 在面向对象设计的历史中,由多重继承机制造成的问题早已众所周知了.所

详解Ruby中的单件方法和单件类_ruby专题

单件方法 Ruby允许给单个对象增加方法,这种只针对单个对象生效的方法,称为单件方法 示例代码 str = "just a regular string" def str.title? self.upcase == self end str.title? # => false str.methods.grep(/title?/) # => [:title?] str.singleton_methods #=> [:title?] str.class # => S