📜  Ruby日期和时间

📅  最后修改于: 2021-01-08 13:13:32             🧑  作者: Mango

红宝石日期和时间

Ruby在其文档中主要有三个与日期和时间有关的类。

  • 日期
  • 约会时间
  • 时间

日期

Ruby date提供了两个类,Date和DateTime。

要了解日期的概念,首先我们需要了解一些术语。

  • 日历日期:日历日期是一年中一个日历月内的特定日期。
  • 序数日期:序数日期是由序号标识的日历年的特定日期。
  • 周日期:周日期是由日历周和天号标识的一天。该年的第一个日历周就是该年的第一个星期四。
  • 朱利安天数:朱利安天数是公元前4713年1月1日中午以来经过的日子。
  • 更改后的儒略日编号:更改后的儒略日编号为公元1858年11月17日午夜以来的经过日期。

Date对象是使用:: new,:: parse,:: today,:: jd,:strptime等创建的。所有date对象都是不可变的,因此无法修改自己。

例:

require 'date' 

puts Date.new(2017,4,3)          
puts Date.jd(2451877)             
puts Date.ordinal(2017,3)       
puts Date.commercial(2017,5,6)   
puts Date.parse('2017-02-03')  
puts Date.strptime('03-02-2017', '%d-%m-%Y')                         
puts Time.new(2017,10,8).to_date   

输出:

Date对象具有多种方法,如以下示例所示。

例:

require 'date' 

d = Date.parse('4th Mar 2017') 
                             
puts d.year                      
puts d.mon                       
puts d.mday                      
puts  d.wday                      
puts d += 1                      
puts d.strftime('%a %d %b %Y')  

输出:

约会时间

Ruby DateTime是Date的子类。它可以轻松处理日期,小时,分钟,秒和偏移量。

使用DateTime.new,DateTime.ordinal,DateTime.parse,DateTime.jd,DateTime.commercial,DateTime.now等创建的DateTime对象。

例:

require 'date' 

puts DateTime.new(2017,3,4,5,6,7) 

输出:

日,分钟,秒或小时的最后一个元素可以是小数。

DateTime对象具有各种方法,如下面的示例所示。

例:

require 'date' 

d = DateTime.parse('4th Mar 2017 02:37:05+05:40') 
                     
puts d.hour               
puts d.min               
puts d.sec                
puts d.offset             
puts d.zone               
puts d += Rational('1.0') 
                     
puts d = d.new_offset('+05:00') 
                    
puts d.strftime('%I:%M:%S %p') 
                   
puts d > DateTime.new(2000) 

输出:

时间

时间类是日期和时间的抽象。它在内部存储为从大纪元时间起的秒数。时间类将GMT(格林威治标准时间)和UTC(协调世界时)等效。

时间可能看起来是相等的,但相比之下,它们可能会有所不同,因为所有时间都可能有分数。

时间实现使用带符号的63位整数,Bignum或Rational。使用整数时,时间会变慢。

创建一个新的时间实例

可以使用:: new创建新的Time实例。这将使用您当前系统的时间。还可以传递部分时间,例如年,月,日,小时,分钟等。

创建新的时间实例时,您至少需要经过一年。如果仅经过了一年,则时间将默认为该年的1月1日,当前系统时区为00:00:00。

例:

puts Time.new        
puts Time.new(2017, 3)     
puts Time.new(2017, 3, 4) 
puts Time.new(2017, 3, 4, 6, 5, 5, "+05:00") 

输出:

使用gm,utc和本地功能的时间

除了使用当前系统设置,您还可以使用GMT,本地和UTC时区。

例:

puts Time.local(2017, 2, 5)  

puts Time.local(2017, 2, 5, 4, 30)   

puts Time.utc(2017, 2, 5, 4, 30)  

puts Time.gm(2017, 2, 5, 4, 30, 36)  

输出:

处理时间的实例

创建时间实例之后,我们可以通过以下方式来处理该时间。

例:

t = Time.new(1991, 07, 5, 9, 15, 33, "+09:00") 
puts t.friday? #=> false 
puts t.year #=> 1993 
puts t.dst? #=> false 
puts t + (60*60*24*365) #=> 1994-02-24 12:00:00 +0900 
puts t.to_i #=> 730522800 

t1 = Time.new(2017) 
t2 = Time.new(2015) 

puts t1 == t2 #=> false 
puts t1 == t1 #=> true 
puts t1 <  t2 #=> true 
puts t1 >  t2 #=> false 

puts Time.new(2010,10,31).between?(t1, t2) #=> true

输出:

时区和夏令时

时间对象可用于获取与时区有关的所有信息。所有信息将根据我们系统的当前时间显示。

例:

time = Time.new 

puts time.zone       
puts time.utc_offset 
puts time.zone      
puts time.isdst     
puts time.utc?    
puts time.localtime  
puts time.gmtime    
puts time.getlocal  
puts time.getutc 

输出: