루비에서 UTC 타임 스탬프를 얻는 방법?


답변:


117
time = Time.now.getutc

근거 : 내 눈에 타임 스탬프는 정확히 다음과 같습니다. 이것은 객체로 정확하게 표현 될 수 있습니다. 스칼라 값, 예를 들어 유닉스 시대 이후의 초, 1601 이후 100ns 간격 또는 표시 목적을위한 문자열 또는 데이터베이스에 타임 스탬프를 저장하는 다른 것이 필요한 경우, 객체에서 쉽게 얻을 수 있습니다. 그러나 이것은 의도 된 용도에 따라 크게 다릅니다.

»진정한 타임 스탬프는 Unix epoch«가 특정 시점 을 나타내는 방법 중 하나 이기 때문에 포인트가 약간 누락 되었기 때문에 초 단위라고 말하지만, 처리하고 있다는 사실을 알기 위해서는 추가 정보가 필요합니다. 숫자가 아닌 시간. Time객체는 특정 시점을 나타내는 멋지게 이러한 문제를 해결 그것이 무엇인지에 대한 명시 적 인도하고 .


93
시간 객체를 제공하므로
Time.now.to_i에

3
내 의견으로는 대상은 타임 스탬프이며 여전히 필요한 모든 자유를 가지고 있습니다. 스칼라 값으로 줄이는 것은 대부분의 경우 실제로 필요하지 않습니다.
Joey

2
타임 스탬프는 신기원을 기준으로합니다. 어느 시간대에 있든 상관 없습니다. manzhikov의 답변이 더 좋습니다.
Ryan Mohr

2
유닉스 타임 스탬프를 사용하지 않는 이유에 대한 좋은 설명이지만 OP 질문 (이 게시물을 찾았을 때와 같은 질문)에는 대답하지 않습니다. 많은 경우 유닉스 타임 스탬프가 필요합니다 (예 : API). 설명 후에도이 답변은 타임 스탬프를 얻는 실제 방법을 제공하지 않았습니다.
stuckj

5
@stuckj, 질문에는 유닉스 타임 스탬프가 언급되어 있지 않습니다. 나는 사람들이»timestamp == Unix time«이라고 생각하기 때문에이 답변에 대한 다운 투표를 계속하고 있습니다.
Joey

247

사용할 수 있습니다 : Time.now.to_i.


1
Time.now.getutc.to_i를 수행하는 것이 더 합리적입니까? 아니면 본질적으로 동일합니까?
stuckj

20
타임 스탬프는 모든 시간대에서 동일합니다. :)
manzhikov

2
아 그래 Brainfart 질문. :)
stuckj

이것이 가장 적절한 답변입니다!
Darlan Dieterich

46

내 의견으로는 기본 형식은별로 유용하지 않습니다. ISO8601은 정렬 가능하고 상대적으로 작고 널리 인식되므로 ISO8601을 선호합니다.

>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"

1
참고이 방법은 ActiveSupport에서 오는 것이 아니라 표준 라이브러리에서 rubydoc.info/docs/rails/ActiveSupport%2FTimeWithZone:iso8601
n0nick

3
@ n0nick 2.0에서도 확실합니까? 레일 등이없는 "vanilla"설치에 사용했음을 알고 /usr/share/ruby/2.0/time.rb있습니다.
팀 실베스터

15

일반적으로 타임 스탬프에는 시간대가 없습니다.

% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true

1
to_f더 좋을 것입니다
xis

1
상황에 따라 다릅니다.
Yuki Matsukura

1
않습니다 타임 스탬프는 시간대가?
Dennis

1
타임 스탬프는 시간대와 관련이 없습니다. 즉, 타임 스탬프는 UTC입니다.
Yuki Matsukura

1
@YukiMatsukura 사실, 그것은 완전히 정확하지도 않습니다. 타임 스탬프는 시간대를 나타내지 않으므로 "timestamp is UTC"만큼 "timestamp is UTC"가 적용됩니다. 문제는 대표적이다. 대부분의 개발자는 유닉스 타임 스탬프 (UTC 또는 다른 시간대는 정수 값이므로 표시하지 않음)로 나타냅니다.
Pellmeister

10

인간이 읽을 수있는 타임 스탬프 (레일 마이그레이션과 같은)가 필요한 경우 ex. " 20190527141340 "

Time.now.utc.to_formatted_s(:number)  # using Rails

Time.now.utc.strftime("%Y%m%d%H%M%S") # using Ruby

7

시간 단위가 초 단위로 제공되는 타임 스탬프는 무엇입니까? 나는 훨씬 더 실용적인 작업을 발견했다 Time.now.to_f. 심지어 to_s.sub('.','')소수점을 제거하기 위해 a 를 던지 거나 다음과 같이 typecast를 수행 할 수도 Integer(1e6*Time.now.to_f)있습니다.


감사. 나는 이것을 사용했다 : Integer(1e3*Time.now.to_f)그래서 내 서버 측 루비 타임 스탬프가 클라이언트 측 자바 스크립트와 동일하도록Date.now()
joshweir


-2

time = Time.zone.now()

그것은 작동합니다

irb> Time.zone.now
=> 2017-12-02 12:06:41 UTC

조나단,이 답변에서 무엇이 잘못되었는지 말씀해 주시겠습니까?
별표

1
이것은 현지 표준 시간대 인 Ruby의 항목에 따라 다릅니다. 로컬 TZ가 UTC 인 경우에만 예상대로 작동합니다.
MasterCheffinator

-6

올바른 방법은 Time.now.getutc.to_i표준 시간대 차이로 인해 정수를 표시하는 것이 항상 utc 타임 스탬프와 항상 같을 필요는 없기 때문에 적절한 타임 스탬프 양을 얻는 것입니다.


7
다른 사람들은 모두 그렇게 말했습니다. 그렇다면 왜 3 년 늦게 새로운 정보없이 복사해야합니까?
Kaspar Lee

2
그리고 문장 부호가 없어서 1 문장을 만들 수 있습니다. 문장이 너무 길고 구문 적으로 정확하고 명확하지 않습니다.
Emile Vrijdags
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.