网安
  • Develop
    • JAVA学习
      • 字节码
      • API开发
      • Web开发
      • 工程结构推荐
      • 创建第一个项目
      • 权限管控
      • 配置文件
      • 日志管理
      • 数据访问
      • 性能监控
      • IoC容器
      • Spring
      • Filter与Listener
      • jsp
      • MVC
      • servlet-1
      • servlet-2
      • servlet-3
      • servlet-4
      • FreeMarker
      • Thymeleaf
      • EL
      • SpEL
      • JSTL
      • 部署
      • JDBC
      • 数据库连接池
      • fastjson
      • jackson
      • XML
      • JSON
      • 序列化
      • Maven
      • 安装与使用
      • 工具
      • 爬虫
    • GO学习
      • GO
        • flag 包
        • goland 远程调试
        • GoReleaser
        • OS 包
        • time 包
        • 格式化输出
    • Lua学习
      • Lua
      • 基础语法
      • LuaJIT
      • 与系统交互
    • Pyhon
      • 基础
      • Django
      • CLI
      • miniforge
      • MockingBird
      • pdb
      • pyc
      • 装的我脑血栓要犯了
      • Python101
      • 反序列化
      • 爬虫
      • Pillow
      • 图像识别
      • flask
    • Speed-Ruby
      • 入门1
      • 入门2 对象
      • 入门3 创建命令
      • Encoding类
      • File类与Dir类
      • IO
      • Proc类
      • Time类与Date类
      • 正则
      • 错误处理与异常
      • 对象、变量和常量
      • 方法
      • 数值
      • 数组
      • 条件判断
      • 循环
      • 运算符
      • Socket编程
      • 字符串
      • 并发与线程
      • 块
      • 类和模块
      • 散列
    • Web
      • HTTP
        • Connection
        • HTTP 报文
        • Vary
      • 笔记
        • 跳转
        • 认证 & 授权
        • 同源策略(SOP)
        • 文件
    • Git 学习笔记
    • JSON
      • JSON 学习笔记
    • HTML
      • Speed-HTML
      • 语法学习
      • HTML字符实体
    • XML
      • XML 学习笔记
    • 计算机基础
      • 操作系统
      • 计算机组成
      • 算法
      • 内存
      • 字符编码
    • gnuplot 学习笔记
    • regex
  • Integrated
    • Linux
      • God-Linux
      • Secure-Linux
      • Power-Linux
      • IO模型
      • Speed-Linux
      • 发行版
      • 工具
      • 启动过程
      • 进程
      • 认证
      • 日志
      • 守护进程
      • 文件
      • 信息
      • VSFTP 配置案例
      • auditd
      • containerd
      • DNS 配置案例
      • Docker
      • Docker-Compose
      • firewalld 实验
      • gpg
      • Iptables
      • httpd
      • LAMP
      • mysql
      • nfs 配置案例
      • openssl
      • PAM
      • samba 配置案例
      • terraform
      • ufw
      • VSFTP 配置案例
    • Network
      • Speed-Net
      • Power-Net
      • SDN 笔记
      • DNS
      • TLS
    • Windows
      • Secure-Win
      • Speed-Win
      • ACL
      • LDAP
      • IPC$(Internet Process Connection)
      • PDB符号文件
      • 工作组
      • WinRM
      • 角色权限
      • 凭据
      • 签名
      • 日志
      • 认证
      • 协议
      • 信息
      • 应用
      • 组策略
      • 域
      • asp站点搭建
      • Exchange 搭建
      • Windows 故障转移集群
      • Windows 基础服务搭建
      • Windows 域搭建
      • 本地抓包
      • PowerShell 笔记
    • 容器
      • Docker
    • 数据库
      • Speed-SQL
      • Power-SQL
      • MSSQL
      • MySQL
      • Postgresql
      • Redis
      • MySQL大小写问题
      • 主键和外键
      • MySQL快速入门
      • 虚拟化
        • ESXi
        • vCenter
  • Plan
    • Mac-Plan
    • Misc-Plan
    • Team-Plan
    • Thinking-Plan
    • VM-Plan
  • Sercurity
    • Power-PenTest
    • BlueTeam
      • 安全建设
      • 分析
      • 加固
      • 取证
      • 应急
      • USB取证
      • 磁盘取证
      • 内存取证
      • ClamAV 部署
      • yara 实验
      • 安防设施搭建使用
      • ZIP明文攻击
      • 流量分析
    • Crypto
      • Crypto
        • 2020 9 G60攻防大赛
        • CTF
        • 2020 9 中能融合杯工控CTF
        • 2020 10 全国工业互联网安全技术技能大赛江苏省选拔赛
        • 2020 10 全国网络与信息安全管理职业技能大赛江苏场
        • 2020 11 I²S峰会暨工业互联网安全大赛
        • 2021 6 第二届I²S峰会暨工业互联网安全大赛
        • 2021-9-第七届工控信息安全攻防竞赛
        • 2021 9 第七届全国职工职业技能大赛某市县选拔赛
        • 2021 9 全国网络与信息安全管理职业技能大赛江苏场
        • 2021-10-G60攻防大赛
    • CTF
      • CTF
      • writeup
        • 2020 9 中能融合杯工控CTF
        • 2020 9 G60攻防大赛
        • 2020 10 全国工业互联网安全技术技能大赛江苏省选拔赛
        • 2020 10 全国网络与信息安全管理职业技能大赛江苏场
        • 2020 11 I²S峰会暨工业互联网安全大赛
        • 2021 6 第二届I²S峰会暨工业互联网安全大赛
        • 2021-9-第七届工控信息安全攻防竞赛
        • 2021 9 第七届全国职工职业技能大赛某市县选拔赛
        • 2021 9 全国网络与信息安全管理职业技能大赛江苏场
        • 2021-10-G60攻防大赛
    • ICS
      • PLC攻击
      • S7comm 相关
      • 工控协议
      • 上位机安全
      • Modbus 仿真环境搭建
      • siemens 仿真搭建实验
      • S7-300 启停实验
    • IOT
      • 无线电安全
        • RFID复制卡
        • RFID基础知识
        • WiFikiller
      • 硬件安全
        • DIY键盘嵌入指纹识别模块实验记录
        • Device-Exploits
        • HID-Digispark
        • HID-KeyboardLogger
        • HID-USBHarpoon
        • HID-USBKeyLogger
      • 固件安全
        • 固件安全
        • Dlink_DWR-932B 路由器固件分析
    • Mobile sec
      • 小程序安全
      • Android安全
    • PWN
      • SLMail溢出案例
      • PWN
    • Red Team
      • OS安全
        • Linux 安全
        • Exploits
        • NTLM中继
        • Windows 安全
        • Responder欺骗
        • Windows-LOL
      • Web_Generic
        • Top 10
          • RCE
          • Fileread
          • SQLi
          • SSRF
          • SSTI
          • Web Generic
          • XSS
          • XXE
      • Web_Tricks
        • JWT 安全
        • HTTP_request_smuggling
        • OOB
        • 绕过访问
      • 靶场
        • Hello-Java-Sec 学习
        • DVWA-WalkThrough
        • pikachu-WalkThrough
        • upload-labs-WalkThrough
        • XVWA-WalkThrough
        • XSS挑战-WalkThrough
      • 实验
        • flask
        • fastjson
        • Log4j
        • nodejs
        • Shiro
        • Spring
        • Weblogic
      • 前端攻防
      • IDOR
    • 安防设备
      • Exploits
      • Bypass 技巧
    • 后渗透
      • 权限提升
      • 后渗透
      • 权限维持
      • 实验
        • C2 实验
        • Exchange
        • 端口转发实验
        • 代理实验
        • 免杀实验
        • 隧道实验
    • 软件服务安全
      • Exploits
      • CS Exploits
      • 实验
        • Docker
        • Kubernetes
        • Mysql
        • Oracle
        • PostgreSQL
        • Redis
        • vCenter
    • 协议安全
      • Exploits
    • 信息收集
      • 端口安全
      • 空间测绘
      • 信息收集
    • 语言安全
      • 语言安全
        • 语言安全
      • GO安全
        • GO安全
        • Go代码审计
      • JAVA安全
        • JAVA安全
        • JAVA代码审计
        • JAVA反序列化
        • SpEL 注入
      • PHP安全
        • PHP安全
        • bypass_disable_function
        • bypass_open_basedir
        • phpinfo
        • PHP代码审计
        • PHP反序列化
        • PHP回调函数
        • 变量覆盖
        • POP
        • 弱类型
        • 伪协议
        • 无字母数字Webshell
      • Python安全
        • pyc反编译
        • Python安全
        • Python 代码审计
        • 沙箱逃逸
      • dotnet安全
      • JS安全
    • 云安全
      • 公有云安全
    • Reverse
      • Reverse
      • FILE
        • ELF
        • BMP
        • JPG
        • PE
        • PNG
        • ZIP
        • 文件头
      • 实验
        • PYAble
          • 2-逆运算
          • 1-基本分析
          • 3-异或
          • 4-Base64
          • 5-Base64换表
          • 6-动态调试
        • Windows
          • condrv.sys 内存损坏漏洞
    • 工具
      • Aircrack
      • BloodHound
      • Burp Suite
      • frp
      • CobaltStrike
      • Ghidra
      • fscan
      • Hashcat
      • IDA
      • merlin
      • Kali
      • Metasploit
      • Mimikatz
      • ModSecurity
      • Nmap
      • nps
      • nuclei
      • pupy
      • RedGuard
      • SET
      • sliver
      • Snort
      • Sqlmap
      • Suricata
      • Sysmon
      • uncover
      • Volatility
      • Wfuzz
      • Wireshark
      • xray
    • 安全资源
      • 靶机
        • VulnHub
          • DC
            • DC2 WalkThrough
            • DC1 WalkThrough
            • DC3 WalkThrough
            • DC4 WalkThrough
            • DC5 WalkThrough
            • DC6 WalkThrough
            • DC9 WalkThrough
            • DC8 WalkThrough
          • It's_October
            • It’s_October1 WalkThrough
          • Kioptrix
            • Kioptrix2 WalkThrough
            • Kioptrix3 WalkThrough
            • Kioptrix4 WalkThrough
            • Kioptrix5 WalkThrough
          • Mission-Pumpkin
            • PumpkinGarden-WalkThrough
            • PumpkinFestival WalkThrough
            • PumpkinRaising WalkThrough
          • Symfonos
            • symfonos1 WalkThrough
            • symfonos2 WalkThrough
            • symfonos3 WalkThrough
            • symfonos5 WalkThrough
        • Wargames
          • Bandit
            • Bandit-WalkThrough
      • 面试问题
        • 面试问题
Powered by GitBook
On this page
  • Time 类与 Date 类
  • Time 类与 Date 类说明
  • 时间的获取
  • 时间的计算
  • 时间的格式
  • 本地时间
  • 从字符串中获取时间
  • 日期的获取
  • 日期的运算
  • 日期的格式
  • 从字符串中获取日期
  1. Develop
  2. Speed-Ruby

Time类与Date类

Time 类与 Date 类


  • https://www.kancloud.cn/imxieke/ruby-base/107308


Time 类与 Date 类说明

Time 类用于表示时间。时间除了表示年月日时分秒的信息以外,还包含了表示地域时差的时区(time zone)信息。例如我们可以计算中国当前时间是国际协调时间的几点。

Date 类只用于表示年月日。因此,相对于 Time 类以秒为单位计算时间,Date 类则是以天为单位进行计算的。Date 类还可以求下个月的同一天、本月末等日期。

Time 类与 Date 类表示时间、日期时并没有什么特别限制(前提是现在的日历能一直用下去,甚至“西历 100 亿年”这样的时间、日期也都是可以表示的)。但实际文件的时间戳、程序的运行时间等系统内的时间、以及数据库中的时间类型数据等的情况下,有时候就会受到执行环境的限制。

时间的获取

  • Time.new

  • Time.now

    通过 Time.new 方法或者 Time.now 方法获取表示当前时间的 Time 对象。

    p Time.new    #=> 2013-03-30 03:06:00 +0900
    sleep 1       #=> 等待1 秒
    p Time.now    #=> 2013-03-30 03:06:01 +0900
  • t.year

  • t.month

  • t.day

    也可以获取时间对象中的年、月、日。

    t = Time.now
    p t        #=> 2013-03-30 03:07:13 +0900
    p t.year   #=> 2013
    p t.month  #=> 3
    p t.day    #=> 30

    时间的相关方法

    方法名 | 意义

    •   | -

    year | 年 month | 月 day | 日 hour | 时 min | 分 sec | 秒 usec | 秒以下的位数(以毫秒为单位) to_i | 从 1970 年 1 月 1 日到当前时间的秒数 wday | 一周中的第几天(0 表示星期天) mday | 一个月中的第几天(与 day 方法一样) yday | 一年中的第几天(1 表示 1 月 1 日) zone | 时区(JST 等)

  • Time.mktime(year[, month[, day[, hour [, min[, sec[, usec]]]]]]])

    通过 Time.mktime 方法可以根据指定时间获取 Time 对象。

    t = Time.mktime(2013, 5, 30, 3, 11, 12)
    p t    #=> 2013-05-30 03:11:12 +900

    文件的创建时间、更新时间等也都能以 Time 对象的形式获取。

时间的计算

Time 对象之间可以互相比较、运算。

t1 = Time.now
sleep(10)    # 等10 秒
t2 = Time.now
p t1 < t2    #=> true
p t2 - t1    #=> 10.005073

还可以增加或减少 Time 对象的秒数。

t = Time.now
p t                    #=> 2013-03-30 03:11:44 +0900
t2 = t + 60 * 60 * 24  #=> 增加24 小时的秒数
p t2                   #=> 2013-03-31 03:11:44 +0900

时间的格式

  • t.strftime(format)

  • t.to_s

    通过 Time#strftime 方法可以把时间转换为遵循某种格式的字符串。

    格式(format)中可以使用的字符串。 格式 | 意义与范围

    •   | -

    %A | 星期的名称(Sunday、 Monday……) %a | 星期的缩写名称(Sun、 Mon……) %B | 月份的名称(January、 February……) %b | 月份的缩写(Jan、 Feb……) %c | 日期与时间 %d | 日(01 ~ 31) %H | 24 小时制(00 ~ 23) %I | 12 小时制(01 ~ 12) %j | 一年中的天(001 ~ 366) %M | 分(00 ~ 59) %m | 表示月的数字(01 ~ 12) %p | 上午或下午(AM、PM) %S | 秒(00 ~ 60) %U | 表示周的数字。以星期天为一周的开始(00 ~ 53) %W | 表示周的数字。以星期一为一周的开始(00 ~ 53) %w | 表示星期的数字。0 表示星期天(0 ~ 6) %X | 时间 %x | 日期 %Y | 表示西历的数字 %y | 西历的后两位(00 ~ 99) %Z | 时区( JST 等) %z | 时区(+0900 等) %% | 原封不动地输出 %

    如,Time#to_s 方法得到的字符串格式与 "%Y-%m-%d %H:%M:%S %z" 是等价的。

    t = Time.now
    p t.to_s                              #=> 2013-03-30 03:13:14 +0900
    p t.strftime("%Y-%m-%d %H:%M:%S %z")  #=> 2013-03-30 03:13:14 +0900

    备注 Time#strftime 方法的格式是与平台相关的,不同平台下的执行结果可能不一样。例如,在 Windows 中,"%Z" 的执行结果会显示“中国标准时间”。

  • t.rfc2822

    通过 Time#rfc2822 方法可以生成符合电子邮件头部信息中的 Date :字段格式的字符串。在互联网的相关文档 RFC(Request For Comments)中,有一个关于电子邮件形式定义的 RFC 2822 文档,rfc2822 这个方法名就来自于此。使用这个方法前,需要预先通过 require "time" 引用 time 库。

    require "time"
     
    t = Time.now
    p t.rfc2822    #=> "Sat, 30 Mar 2013 03:13:34 +0900"
  • t.iso8601

    通过 Time#iso8691 方法生成符合 ISO 8601 国际标准的时间格式的字符串。使用这个方法时也需要引用 time 库。

    require "time"
     
    t = Time.now
    p t.iso8601    #=> "2013-03-30T03:13:34+09:00"

本地时间

世界各地都有时差。大家的计算机中也设有时区,一般计算机中的时间都是根据时区来设定的。

  • t.utc

  • t.localtime

    我们可以用 Time#utc 方法把 Time 对象的时区变更为国际协调时间(UTC)。反之,用 Time#localtime 方法则可以把 UTC 变更为本地时间。

    t = Time.now
    p t    #=> 2013-03-30 03:15:19 +0900
    t.utc
    p t    #=> 2013-03-29 18:15:19 UTC
    t.localtime
    p t    #=> 2013-03-30 03:15:19 +0900

从字符串中获取时间

可以将以字符串形式表示的时间转换为 Time 对象。

  • Time.parse(str)

    通过使用 require "time",我们就可以使用 Time.parse 方法,来操作以字符串形式表现的时间。Time.parse 方法会解析参数字符串 str,返回对应的 Time 对象。

    Time.parse 方法除了可以返回与 Time#to_s 方法相同的格式,还可以返回 "yyyy/mm/dd" 等多种格式。

    require "time"
     
    p Time.parse("Sat Mar 30 03:54:15 UTC 2013")
        #=> 2013-03-30 03:54:15 UTC
    p Time.parse("Sat, 30 Mar 2013 03:54:15 +0900")
        #=> 2013-03-30 03:54:15 +0900
    p Time.parse("2013/03/30")
        #=> 2013-03-30 00:00:00 +0900
    p Time.parse("2013/03/30 03:54:15")
        #=> 2013-03-30 03:54:15 +0900
    p Time.parse("H25.03.31")
        #=> 2013-03-31 00:00:00 +0900
    p Time.parse("S48.9.28")
        #=> 1973-09-28 00:00:00 +0900

日期的获取

Date 类用于处理不包含时间的日期。使用 Date.today 方法可以得到表示当前日期的 Date 对象。使用 Date 类需要引用 date 库。

require "date"

d = Date.today
puts d    #=> 2013-03-30

与 Time 类一样,日期也有其相关的方法。

require "date"

d = Date.today
p d.year    # 年 => 2013
p d.month   # 月 => 3
p d.day     # 日 => 30
p d.wday    # 一周中的第几天(0 表示星期天)      => 6
p d.mday    # 一个月中的第几天(与 day 方法一样) => 30
p d.yday    # 一年中的第几天(1 表示 1 月 1 日)  => 89

还可以用指定日期生成 Date 对象。

require "date"

d = Date.new(2013, 3, 30)
puts d    #=> 2013-03-30

Date 类有一个特点是,可以对月末的日期做-1 处理(-2 表示月末的前一天)。当然也可以应对闰年。

require "date"

d = Date.new(2013,2,-1)
puts d    #=> 2013-02-28

d = Date.new(2016, 2, -1)
puts d    #=> 2016-02-29

日期的运算

Date 对象之间的运算以天为单位。因此,Date 对象之间进行减法运算时,返回的是两者之间的天数。日期减法运算的结果不是整数,而是 Rational 对象。此外,还可以将 Date 对象与整数进行加法、减法等运算,这时会返回该对象前后的日期。

require "date"

d1 = Date.new(2013, 1, 1)
d2 = Date.new(2013, 1, 4)
puts d2 - d1    #=> 3/1 (3 天的意思)

d = Date.today
puts d          #=> 2013-03-30
puts d + 1      #=> 2013-03-31
puts d + 100    #=> 2013-07-08
puts d - 1      #=> 2013-03-29
puts d -100     #=> 2012-12-20

通过使用 >> 运算符,我们就可以获取后一个月相同日期的 Date 对象。同理,使用 << 运算符得到的是表示前一个月相同日期的 Date 对象。如果该月中没有相同的日期(例如 2 月 30 日),则会返回月末的日期。

require "date"

d = Date.today
puts d        #=> 2013-03-30
puts d >> 1   #=> 2013-04-30
puts d >> 100 #=> 2021-07-30
puts d << 1   #=> 2013-02-28
puts d << 100 #=> 2004-11-30

日期的格式

与 Time 类一样,通过 strftime 方法也可以将日期按指定的格式转换为字符串。但结果中时间的部分会全部变为 0。

require "date"

t = Date.today
p t.strftime("%Y/%m/%d %H:%M:%S")
  #=> "2013/03/30 00:00:00"
p t.strftime("%a %b %d %H:%M:%S %Z %Y")
  #=> "Sat Mar 30 00:00:00 +00:00 2013"
p t.to_s  #=> "2013-03-30"

从字符串中获取日期

使用 Date.parse 方法可以将字符串转换为日期。这个方法可以应对多种日期格式。

require "date"

puts Date.parse("Sat Mar 30 03:50:12 JST 2013")  #=> 2013-03-30
puts Date.parse("H25.05.30")                     #=> 2013-05-30
puts Date.parse("S48.9.28")                      #=> 1973-09-28
PreviousProc类Next正则