Time은 특정 시점을 나타내는 데 도움이 되는 Ruby의 클래스입니다.
이 기사를 읽고 나면 Ruby 시간 마법사가 되기 위해 알아야 할 모든 것을 배우게 될 것입니다!
다루는 주제 :
- 문자열을 시간 개체로 변환하는 방법
- 시간을 구성요소로 나누는 방법(일/시간/밀리초…)
Date
사용 방법 ,DateTime
&Time
Ruby 클래스- 원하는 방식으로 시간 형식을 지정하는 방법
- 두
Time
의 차이를 찾는 방법 개체
해보자!
루비 타임 클래스
Time
을 사용할 수 있습니다. 시간과 날짜를 나타내는 Ruby 클래스
이 날짜 세 가지 구성 요소가 있습니다.
- 일
- 월
- 연도
그리고 시간 :
- 시간
- 분
- 초
이 정보는 Time
에 의해 저장됩니다. 클래스는 Unix 시간이라고도 하는 Epoch 이후 경과된 시간(초)입니다.
초기화하는 몇 가지 방법이 있습니다. Time
개체:
Time.now
를 사용하여 현재 시간을 나타내는 객체를 얻을 수 있습니다.Time
을 만들 수 있습니다. Unix 타임스탬프 및at
를 사용하는 객체 방법Time.new
에 시작 날짜를 숫자로 지정할 수 있습니다. (형식:년/월/일)
좋아요 :
Time.now # 2018-10-19 15:43:20 +0200 Time.new(2018, 1, 1) # 2018-01-01 00:00:00 +0100 Time.at(15000000000) # 2017-07-14 04:40:00 +0200
구성 요소에 대해 시간 개체를 요청할 수 있습니다.
예를 들어...
시간 개체가 나타내는 일, 월 또는 시간을 물어볼 수 있습니다.
t = Time.now puts t.day puts t.month puts t.hour
또한 이 날짜가 특정 요일에 해당하는지 물어볼 수도 있습니다.
예를 들어 :
"이 날짜가 일요일입니까?".
이들은 술어 메서드이며 true
를 반환합니다. 또는 false
.
예 :
t = Time.now puts t.monday? puts t.sunday? puts t.friday?
시도해 보세요!
시간대
Time
개체에 연결된 시간대가 있습니다.
Time
의 현재 시간대를 확인할 수 있습니다. zone
을 사용하는 객체 방법.
그러면 시간대 약어가 표시됩니다.
시간대 오프셋을 원하는 경우 utc_offset
를 사용할 수 있습니다. 방법. 이 방법의 출력은 초 단위이지만 3600으로 나누어 시간 단위로 얻을 수 있습니다.
예 :
t = Time.now t.zone # "CET" t.utc_offset / 3600 # 1
UTC로 현재 시간을 얻을 수도 있습니다.
Time.now.utc
루비 시간 포맷
Ruby 형식 Time
기본적으로 특정 방식으로 개체를 지정합니다.
하지만 다른 것을 원할 수도 있습니다.
귀하의 사용 사례에 맞는 것 .
좋은 소식입니다!
방법을 사용할 수 있습니다. 거의 필요한 모든 형식을 얻으려면 .
이 메서드는 strftime
입니다. , 기본적으로 '포맷 시간'을 의미합니다.
형식 지정자와 함께 문자열을 전달하여 작동하며 이러한 지정자는 값으로 대체됩니다. printf
를 사용한 적이 있다면 방법과 아이디어가 매우 유사합니다.
몇 가지 예를 살펴보겠습니다. :
time = Time.new time.strftime("%d/%m/%Y") # "05/12/2015" time.strftime("%k:%M") # "17:48" time.strftime("%I:%M %p") # "11:04 PM" time.strftime("Today is %A") # "Today is Sunday" time.strftime("%d of %B, %Y") # "21 of December, 2015" time.strftime("Unix time is %s") # "Unix time is 1449336630"
보시다시피 이 방법은 매우 유연합니다. 날짜 없이 시간을 가져오거나 현재 월의 연도, 일 및 이름으로 멋지게 형식화된 날짜를 가져올 수 있습니다.
Strftime 형식 표
형식 | 설명 |
---|---|
%d | 요일(01..31) |
%m | 연도의 월(01..12) %-m 사용 (1..12) |
%k | 시(0..23) |
%M | 분 |
%S | 초(00..60) |
%I | 시(1..12) |
%p | 오전/오후 |
%Y | 연도 |
%A | 요일(이름) |
%B | 월(이름) |
다음 링크에서 사용 가능한 다양한 형식에 대한 자세한 정보를 찾을 수 있습니다.
- https://strftime.net/
- https://devdocs.io/ruby/time#method-i-strftime
타임스탬프 생성
특정 이벤트 날짜까지 시간대 독립적인 타임스탬프를 생성할 수 있습니다.
방법은 다음과 같습니다. :
Time.now.to_i # 1549054305
이 타임스탬프는 UTC(협정 세계시)의 초 단위입니다.
시차(덧셈과 뺄셈)
때로는 현재 시간이 아니라 미래 또는 과거 시간을 원할 때가 있습니다.
시간 개체로 덧셈을 할 수 있습니다!
Time
에 대한 내부 표현을 기억하십시오. 초 단위이므로 다음을 수행할 수 있습니다.
# Add ten seconds time = Time.new + 10
이 예에서는 현재 시간에서 10초 후에 설정된 시간 개체를 얻습니다.
그러면 그 시간이 아직 지났는지 확인할 수 있습니다.
Time.new > time
어제와 같은 것을 얻으려면 하루가 몇 초인지 계산해야 합니다.
좋아요 :
# seconds * minutes * hours 60 * 60 * 24 # 86400
이제 이 숫자를 사용하여 현재 날짜에서 뺄 수 있습니다.
Time.now - 86400
Rails를 사용하는 경우 다음을 수행할 수 있습니다.
Time.now - 1.day
날짜 클래스
Date
수업에는 분, 초 또는 시간의 개념이 없습니다. 이 클래스는 내부적으로 모든 것을 일 단위로 저장합니다.
Date
를 사용하려면 require 'date'
에 필요한 클래스 .
Date.today
를 사용하여 현재 날짜를 얻을 수 있습니다. .
시간과 달리 Date.new
today
의 별칭이 아닙니다. , 그래서 그것을 염두에 두십시오.
Date.today # Current date Date.new # Returns a negative date
날짜 산술은 Time
과 유사합니다. 클래스에서 차이점은 초 대신 일을 추가한다는 것입니다.
Date.today + 1 # Adds one day
Date
시, 초, 분에 대해 아무것도 모르므로 필요하지 않은 경우에만 이 클래스를 사용하십시오.
날짜 및 시간 파싱
Date.parse
메소드는 날짜처럼 보이는 문자열을 구문 분석하려고 시도합니다.
입력 형식을 감지하는 간단한 휴리스틱 알고리즘을 사용합니다.
때로는 원치 않는 결과가 발생합니다.
예 :
Date.parse("10/10/2010") # -> 2010-10-10 Date.parse("September 3") # -> 2015-09-03 Date.parse("May I have a cup of coffee, please?") # -> 1 of May
더 엄격한 것이 필요하면 Date.iso8601
을 사용할 수 있습니다. 방법.
iso8601
날짜 형식은 다음과 같습니다.
year-month-day
ArgumentError
잘못된 입력 시 예외가 발생합니다.
예 :
Date.iso8601("2018-10-01")
Date.strptime
을 사용할 수 있습니다. 메소드 및 형식 지정자 세트를 사용하여 사용자 정의 입력 형식을 제공합니다. strftime
에 사용할 수 있는 것과 동일한 지정자입니다. .
예 :
Date.strptime("3 of September", "%d of %B") # 2015-09-03
Time
을 사용하여 시간을 구문 분석할 수 있습니다. 수업.
즉 :
'2018-01-01 00:00'과 같은 문자열을 Time 객체로 변환하는 방법!
예시 :
require 'time' Time.parse("September 20 18:00")
입력 문자열의 형식을 제공하려면 strptime
을 사용할 수 있습니다. 방법.
좋아요 :
require 'time' Time.strptime("1 of December 2017", "%d of %B %Y")
Time.parse
의 유일한 차이점 &Date.parse
반환되는 개체의 종류입니다(Time
또는 Date
).
날짜 상수
Date
클래스에는 유용할 수 있는 몇 가지 상수가 있습니다.
예를 들어, 월이 있는 배열과 요일이 있는 배열이 있습니다.
월은 인덱스 1에서 시작하므로 직접 month number -> month name
을 얻을 수 있습니다. 매핑.
요일은 일요일로 시작하지만 rotate
를 사용할 수 있습니다. 월요일에 한 주가 시작되도록 하는 방법입니다.
Date::MONTHNAMES # (index 0 = nil) Date::DAYNAMES.rotate(1)
DateTime 클래스
DateTime
클래스는 Date
의 하위 클래스입니다. 날짜 외에도 초를 저장할 수 있습니다.
예 :
require 'date' DateTime.superclass # Date DateTime.now # DateTime: 2018-10-15T16:06:39+02:00
Time
모두 및 DateTime
동일한 작업을 수행할 수 있지만 주요 차이점은 Time
C
로 구현 , 그래서 더 빠를 것입니다.
실적 :
Comparison: Time: 2644596.6 i/s DateTime: 231634.8 i/s - 11.42x slower
ActiveSupport – 시간 및 날짜 방법
Rails를 사용해 본 적이 있다면 3.days.ago
와 같은 것에 익숙할 것입니다. .
이러한 메서드는 순수 Ruby에서 사용할 수 없으며 ActiveSupport
에 의해 추가됩니다. Rails의 구성 요소입니다.
여기에서 몇 가지 예를 찾을 수 있습니다. 이러한 메서드가 Time
을 반환하지 않는 방법에 주목하세요. 또는 Date
개체이지만 사용자 정의 ActiveSupport
수업.
1.hour.to_i # 3600 1.day # ActiveSupport::Duration 3.days.ago # ActiveSupport::TimeWithZone
이것들로 시간 계산을 할 수 있고 내일 날짜와 같은 것을 얻을 수 있습니다:
Time.now + 1.day
기타 Rails 전용 시간 방법:
date = Time.current date.change(hour: 20) date.at_beginning_of_day
서식 지정:
date = Date.today date.to_formatted_s(:short) # "16 Jul" date.to_formatted_s(:long) # "July 16, 2018"
이러한 메서드에 대한 코드는 실제로 매우 간단하므로 살펴봐야 합니다. TimeWithZone의 소스 코드도 살펴볼 가치가 있습니다.
요약
이 기사에서는 Time &Date 클래스, Ruby에서 시간을 구문 분석하고 형식을 지정하는 방법, ActiveSupport 시간 확장을 사용하는 방법에 대해 배웠습니다.
읽어주셔서 감사합니다!