Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby 시간 및 날짜 클래스를 사용하는 방법

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 시간 확장을 사용하는 방법에 대해 배웠습니다.

읽어주셔서 감사합니다!