20.1Time类 ,Data类

Time.now或者Time.new:获取当前时间。

相关Method:

year, month, hour, min ,sec,

wday: 一周中的第几天,返回整数。(0表示星期天)

mday: the day in a month

yday: the day in one year

zone: 时区time zone  , => "CST"

Time.mktime(参数)

> t = Time.mktime(2018,02,11,9,37)     #=> 2018-02-11 09:37:00 +0800

sleep(10)  #等待多少秒

20.3 Time对象可以互相比较和运算。

> t = Time.now          #=> 2018-02-11 09:39:39 +0800

> t1 = t + 60*60*24   # => 2018-02-12 09:39:39 +0800

t.to_s  #转换为字符串

t.strftime() #客制化某种格式的字符串

20.5 本地时间

t.utc   #得到一个新对象,获取国际协调时间UTC

t.localtime   #得到一个新对象, 本地时间

20.6 从字符串获取时间。

获得字符串:如

"2010年12月23日下午8点17分50秒"

解析成Time对象:

用Time.prase(str),但中文的无法解析,特殊格式的也无法解析。 需要自定义Method。

例子:把中文时间,转换为Time对象?

def cparsedate(str)
now = Time.now
year = now.year
month = now.month
day = now.day
hour = now.hour
min = now.min
sec = now.sec
str.scan(/(上午|下午)?(\d+)(年|月|日|点|分|秒|时)/) do
case $3
when "年"
year = $2.to_i
when "月"
month = $2.to_i
when "日"
day = $2.to_i
when "点"
hour = $2.to_i
hour += 12 if $1 == "下午"
when "时"
hour = $2.to_i when "分"
min = $2.to_i
when "秒"
sec = $2.to_i
end
end
return Time.mktime(year, month, day, hour, min, sec)
end
p cparsedate("2010年12月23日下午8点17分50秒")
p cparsedate("12月23日下午8点17分50秒")
p cparsedate("上午8时17分50秒")
p cparsedate("8点17分50秒")

20.7 获取日期

require "date" 获取Date类需要引用date库

Date.today

相关method和Time一样。

指定生成日期使用:Date.new(2018, 1, 31) ⚠️  :和Time.mktime()区分

20.8计算日期

Date对象减法,返回天数。对象是Rational对象

> d1 = Date.new(2018,1,1)
 => #<Date: 2018-01-01 ((2458120j,0s,0n),+0s,2299161j)>
> d2 = Date.new(2018,1,4)
 => #<Date: 2018-01-04 ((2458123j,0s,0n),+0s,2299161j)>
> d2 - d1  #=> (3/1)

<<,>>返回前/后一个月相同的日期

> d = Date.today

=> #<Date: 2018-02-11 ((2458161j,0s,0n),+0s,2299161j)>

> d + 1
 => #<Date: 2018-02-12 ((2458162j,0s,0n),+0s,2299161j)>
> d >> 1
 => #<Date: 2018-03-11 ((2458189j,0s,0n),+0s,2299161j)>

20.11

to_time 和 to_date互相转换Time对象和Date对象。

GC:Garbage Collection ,ruby自动支持。

根据生日计算年龄。

定义一个Person类,内含初始化method,  age method.

require "date"
class Person
attr_reader :birth_date
# 通过 Person.new 获取关键参数生年月日
def initialize(birth_date)
@birth_date = birth_date
end
# 返回某个日期的年龄。没有指定日期则返回今天的年龄。
def age(date=Date.today)
# 如果是出生前则返回 -1 (错误)
return -1 if date < birth_date
years = date.year - birth_date.year if date.month < birth_date.month
# #没满一年,所以减一年
years -= 1
elsif date.month == birth_date.month && date.day < birth_date.day
# 还差不到一个月生日,所以减一年
years -= 1
end
return years
end
end
ruby = Person.new(Date.new(1993, 2, 24))
p ruby.birth_date # 生年月日
p ruby.age # 今天
p ruby.age(Date.new(2013, 2, 23)) # 20岁的前一天 19
p ruby.age(Date.new(2013, 2, 24)) # 20岁的生日 20
p ruby.age(Date.new(1988, 2, 24)) # 出生之前 -1

上午的练习,设计其他的知识点,没仔细学。


第21章,Proc 对象。

(已完成练习。)

21.1Proc类是什么?使块对象化的类。

创建和执行Proc对象:

Proc.new():典型方法

proc{...}  :对proc方法指定block

Proc#call 执行block. 参数是块变量,块中最后的表达式的值返回,            call(params,...) → obj

例子:

a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }

答案:

a_proc.call(9, 1, 2, 3)  #=> [9, 18, 27]
a_proc[9, 1, 2, 3] #=> [9, 18, 27]
a_proc.(9, 1, 2, 3) # 仅仅隐藏了call
a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]

*values:代表传入的参数转化为数组。

21.11  lambda 表达式 ,简写:->(块变量){处理}

和Proc.new, proc一样,但有区别,lambda创建的Proc对象的行为更接近method

区别:

第一,参数检查严格。

a_proc = proc {|a,b| [a,b] }
a_proc.call(1) #=> [1, nil]
a_proc = lambda {|a,b| [a,b] }
a_proc.call(1) # ArgumentError: wrong number of arguments

第二,lambda可以使用return将值从block返回。

#计算立方cube
def power_of(n)
  lambda do |x|
    return x**n
  end

# 或者简写 :   ->(x){return x**n}

end
cube = power_of(3)
p cube.call(5)  #=> 125

21.12 通过Proc参数接收块

&block

def total2(from, to, &block)
  result = 0
  from.upto(to) do |num|
    if block
      result += block.call(num)
    else
      result += num
    end
  end
  return result
end
p total2(1, 2)
p total2(1, 10){|num| num ** 2}    #=>385

21.2 Proc特征

Proc对象可以作为无名函数(lambda)或方法使用,但不是单纯的将“处理”对象化,

还可以将处理的内容,本地变量的作用域等定义block时的状态一起保存下来。

闭包closure:将处理内容,变量等环境同时保存的对象。 (保存数据)

def counter
c = 0 # 初始化计数器
Proc.new do # 每调用1次call方法,计数器加1
c += 1 # 返回加1后的Proc对象
end
end # 创建计数器c1并计数
c1 = counter
p c1.call #=> 1
p c1.call #=> 2
p c1.call #=> 3 # 创建计数器c2并计数
c2 = counter # 创建计数器c2
p c2.call #=> 1
p c2.call #=> 2 # 再次用c1计数
p c1.call #=> 4

21.3 Proc类的 instance method

prc === arg

在Proc对象作为case语句的条件时使用,通过===指定的参数只能是1个,这是语法的

2月9日 Time and Date(Ruby基础) \n 2月10日 ,使用Proc,block对象化。的更多相关文章

  1. 1月10日 ruby基础教程,查漏补缺; 2月22日 Exception补充

    https://ruby-doc.org/core-2.5.0/Exception.html 1月20日练习完1,2章. 第一章 初探 ‘’单引号不执行转义符. \t 制表符.\n 换行符. p me ...

  2. [网站公告]3月10日23:00-4:00阿里云SLB升级,会有4-8次连接闪断

    大家好,阿里云将于3月10日23:00-4:00对负载均衡服务(SLB)做升级操作,升级期间SLB网络连接会有约4-8次闪断.由此给您带来麻烦,敬请谅解! 阿里云SLB升级公告内容如下: 尊敬的用户: ...

  3. 2016年12月10日 星期六 --出埃及记 Exodus 21:5

    2016年12月10日 星期六 --出埃及记 Exodus 21:5 "But if the servant declares, `I love my master and my wife ...

  4. 2016年11月10日 星期四 --出埃及记 Exodus 20:1

    2016年11月10日 星期四 --出埃及记 Exodus 20:1 And God spoke all these words: 神吩咐这一切的话说,

  5. 2014年7月10日,我人生的最重要Upgrade

    2014年7月10日上午,我的小公主顺利的出生于国妇婴.之前各种紧张,各种不安.在不安中的前天晚上陪着来上海的董博士于方先生在人民广场聚餐.大家都是工作几年的,各种感慨,对于工作中的零零种种.还有对未 ...

  6. 【2017年9月10日更新】ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发

    ABP代码生成器介绍 ABP Code Generator 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始 ...

  7. 成都Uber优步司机奖励政策(4月10日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. 北京Uber优步司机奖励政策(4月10日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. Network Real Trace Analysis 2015年12月10日

    了解网络中真实的流量,国内很难找到巨人的肩膀. WAND是新西兰waikato 大学计算机系的研究小组,主要做网络测量,大规模网络流量捕获,网络分析.还做专业的分析软件. libtrace是其开源的分 ...

随机推荐

  1. 数据仓库基础(七)Informatica PowerCenter介绍

    本文转载自:http://www.cnblogs.com/evencao/p/3140938.html  Infromatica PowerCenter介绍: 1993年在美国加利福尼亚州成立,一年后 ...

  2. java多线程----JUC集合”01之 框架

    java集合的架构.主体内容包括Collection集合和Map类:而Collection集合又可以划分为List(队列)和Set(集合). 1. List的实现类主要有: LinkedList, A ...

  3. oracle计算过程执行时间写法

    --在oracle写过程中很多是对数据处理,业务比较繁琐,有的需要结合job定时器使用,这样就需要知道执行过程的大概时间,不废话直接上脚本,统计单位为分钟 PROCEDURE DATA_DEAL_WI ...

  4. (六)最最基本的git操作

    1.git init——初始化仓库 初始化成功的标志如下(.git默认为隐藏) 2.git status——查看仓库状态 ps:未跟踪的文件 (untracked files) 不妨在尝试在仓库建立一 ...

  5. 01: tornado基础篇

    目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 Torn ...

  6. 03: KindEditor (HTML可视化编辑器)

    目录: 1.1 kindEditor常用配置参数 1.2 kindEditor下载与文件说明 1.3 kindEditor实现上传图片.文件.及文件空间管理 1.1 kindEditor常用配置参数返 ...

  7. Codeforces 788A Functions again - 贪心

    Something happened in Uzhlyandia again... There are riots on the streets... Famous Uzhlyandian super ...

  8. Oracle RAC(Real Application Clusters)とは

    ここからはOracle RAC(Real Application Clusters)の基本的な概念について述べていきたいと思います. 「RAC」の読み方は普通に「ラック」です. その前に.通常のデータ ...

  9. Package libvirt was not found in the pkg-config search path

    关于pip安装libvirt-python的时候提示Package libvirt was not found in the pkg-config search path的问题解决方法 1.一开始以为 ...

  10. Linux文件时间详解ctime、mtime、atime【转】

    本文转载自:http://blog.csdn.net/doiido/article/details/43792561 Linux系统文件有三个主要的时间属性,分别是 ctime(change time ...