ruby中Time/Date/DateTime小结

  • Time,Date,DateTime的区别:
Time:只能使用1970年以后的日期,包括时分秒
Date:可以使用更以前的日期,但不包括时分秒,需要require "date"
DateTime:综合了Time和Date,需要require "date"

比如:

require "date"
p Date.new(2013,2,2,12,11,11)   #wrong
p DateTime.new(2013,2,2,12,11,11)
p Time.new(2013,2,2,12,11,11)

相互转化:Time.now.to_date.to_datetime.to_time

  • 显示当前时间的linux时间戳:只对Time有效
    p Time.now.to_i
  • 显示当前时间戳的时间:
p Time.at(timestamp)
p Time.at(Time.now.to_i)
  • 格式化时间,对Time,Date,DateTime有效
    Date to String:
Date.new.strftime("%y-%m-%d %A")
  • 用Time来生成时间 :
    先看一下::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
  • format参数:
%a - The abbreviated weekday name (``Sun'')-星期的缩写(``Sun'')
%A - The full weekday name (``Sunday'')-星期 (``Sunday'')
%b - The abbreviated month name (``Jan'')-月份的缩写 (``Jan'')
%B - The full month name (``January'')-月份(``January'')
%c - The preferred local date and time representation-本地时间的显示格式
%d - Day of the month (01..31)-月份中的几号(01..31)
%H - Hour of the day, 24-hour clock (00..23)-24小时制中的小时(00..23)
%I - Hour of the day, 12-hour clock (01..12)-12小时制中的小时(01..12)
%j - Day of the year (001..366)-一年中的第几天 (001..366)
%m - Month of the year (01..12)-一年中的第几个月(01..12)
%M - Minute of the hour (00..59)-分钟 (00..59)
%p - Meridian indicator (``AM'' or ``PM'')-上午还是下午(``AM'' or ``PM'')
%S - Second of the minute (00..60)-秒(00..60)
%U - Week number of the current year, starting with the first Sunday as the first day of the first week (00..53)一年中的第几个星期,从第一个星期天开始算。
%W - Week number of the current year, starting with the first Monday as the first day of the first week (00..53)一年中的第几个星期,从第一个星期一开始算。
%w - Day of the week (Sunday is 0, 0..6)一个星期中的第几天(Sunday is 0, 0..6)
%x - Preferred representation for the date alone, no time只显示日期,没有具体时间
%X - Preferred representation for the time alone, no date只显示时间,没有日期
%y - Year without a century (00..99)不显示年份中的前两位(00..99)
%Y - Year with century当前年份
%Z - Time zone name时间域
%% - Literal ``%'' character

String to Date:

Date.parse(String)
p Date.parse("2012/12/12 21:21:21")
p Date.parse("1234-4-3")
Time.new(2011,1,1)+ 1 #相当于加1秒时间
Date.new(2011,1,1)+ 1 #相当于加1天时间
DateTime.new(2011,1,1)+ 1 #相当于加1天时间
  • 利用net/telnet获取当前时间from
require 'net/telnet'
time_svr    = "time.nist.gov"
tn          = Net::Telnet.new("Host"=>time_svr,"Port"=>"time","Timeout"=>60,"Telnetmode"=>false)
msg         = tn.sock.recv(4).unpack('N')[0]
remote_time = Time.at(msg - 2208988800)

puts remote_time.strftime("%Y-%m-%d %H:%M:%S")

你可能感兴趣的:(ruby中Time/Date/DateTime小结)