Programing

Elixir에서 현재 날짜 및 / 또는 시간 가져 오기

lottogame 2020. 11. 7. 08:54
반응형

Elixir에서 현재 날짜 및 / 또는 시간 가져 오기


이것은 정말 멍청한 질문처럼 보이지만 Elixir에서 현재 날짜 또는 시간을 어떻게 얻고 표시합니까? 문서 를 살펴 보았지만 아무것도 찾을 수 없었습니다. Erlang 기능을 사용해야합니까?


질문에 더 구체적으로 대답하려면 (Timex를 사용하라는 Onorio의 권장 사항에 정말 감사합니다!) :calendar.universal_time()또는을 사용하여 Erlang 표준 라이브러리에서 현재 날짜와 시간을 가져올 수 있습니다 :calendar.local_time(). 모듈 datetime에서 Erlang의 유형으로 작업하는 데 유용한 많은 기능이 calendar있지만 다소 제한적이며 Timex가 제공되는 날짜를 구문 분석하거나 형식화 하는 데 필요한 기능을 제공하지 않습니다.


DateTime.utc_now/0UTC DateTime을 가져 오는 데 사용할 수 있습니다 .


Erlang 19.1에서 :

:os.system_time(:millisecond)

Erlang 18에서 :

:os.system_time(:milli_seconds)

현재 UNIX 타임 스탬프 UTC를 제공합니다.

블로그 게시물 http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html 을 연결해 주신 @HenrikN에게 감사드립니다 .


NaiveDateTime

시간대에 신경 쓰지 않고 순수한 날짜와 시간을 원한다면 NaiveDateTime다음을 사용하십시오 .

NaiveDateTime.utc_now
# => ~N[2017-11-30 20:49:54.660724]

날짜 시간

시간대 세부 정보도 원하는 경우을 사용 DateTime하면 시간대 이름, UTC 오프셋, STD 오프셋 및 시간대 약어와 같은 항목도 반환됩니다.

DateTime.utc_now
# => %DateTime{calendar: Calendar.ISO, day: 30, hour: 20, microsecond: {667345, 6}, minute: 51, month: 11, second: 58, std_offset: 0, time_zone: "Etc/UTC", utc_offset: 0, year: 2017, zone_abbr: "UTC"}

그런 다음 to_date/1to_time/1이러한 모듈에서 호출 하여 datetime 구조체에서 특정 날짜 및 시간 값을 가져올 수도 있습니다 .


가장 좋은 방법은 Elixir에 Paul Schoenfelder (일명 BitWalker)의 timex 라이브러리를 사용하는 것입니다. lib는 여기에 있습니다 : https://github.com/bitwalker/timex 그리고 hex.pm https://hex.pm/packages/timex 에서 패키지를 얻을 수 있습니다 . Paul은 해당 github repo의 readme 페이지에서 라이브러리 사용 방법에 대한 좋은 설명을 친절하게 제공했습니다.

네이티브 Erlang 라이브러리를 호출 할 수는 있지만 Elixir를 다룰 때 Paul의 lib가 더 우수하다고 생각합니다.


원하는 형식에 따라 다릅니다.

Elixir의 Erlang 표준 라이브러리에있는 모든 기능을 사용할 수 있습니다. 전통적으로 다음과 같은 now/0기능으로 시간을 얻을 수 있습니다.

iex(1)> :erlang.now
{1487, 549978, 29683}

이는 time_t2017 년 2 월 20 일 월요일 자정 UTC 이후 19 분 38.29683 초인 1,487,549,978.29683을 나타냅니다 .

그러나 Erlang / OTP 18 이후로이 기능은 더 이상 사용되지 않습니다. 그 이유 중 하나는 Erlang이 반환 값이 모든 호출을 증가시킬 것이라고 보장하기 때문입니다. 마이크로 초당 한 번 이상 호출 할 수있을만큼 빠른 속도로 머신에서 타이트 루프에서 호출하면 반환 된 타임 스탬프가 실시간보다 앞서게됩니다.

대체는 더 정밀하고 제어 가능한 API입니다 . 이 새로운 API에 대한 기본 인터페이스 os:system_time/0는 시스템 정의 단위로 에포크 시간을 반환 하는 함수입니다.

iex(2)> :os.system_time
1487550102372148000

system_time/1하지만을 사용 하여 특정 단위를 요청할 수 있습니다 .

iex(3)> :os.system_time(:millisecond)
1487549663928

Elixir 1.2부터 이러한 함수는 기본 System모듈 에서도 사용할 수 있습니다 .

iex(4)> System.system_time(:second)
1487549711

더 친숙하지만 여전히 Elixir 네이티브 인터페이스를 원하면 calendar모듈을 사용 하면 튜플이 제공됩니다.

iex(5)> :calendar.universal_time
{{2017, 2, 20}, {0, 26, 47}}

1.3 이후, 비약은 날짜와 시간을 조작하기위한 모듈 자체의 제품군을했다 : DateDateTime. 함수를 사용하여 다음과 같이 현재 날짜 또는 시간을 가져올 수 있습니다.

iex(6)> Date.utc_today
~D[2017-02-20]
iex(7)> DateTime.utc_now
#DateTime<2017-02-20 00:27:51.776208Z>

UTC에서 :os.timestamp\0반환 {megaseconds, seconds, microseconds}되는를 사용할 수도 있습니다 . :os.timestamp |> :calendar.now_to_datetime이제 erlang 표준 {{YYYY, MM, DD}, {HH, MM, SS}}형식으로 제공 됩니다.


일광 절약 시간 또는 시간대를 처리해야하는 경우이를위한 라이브러리를 만들었습니다. Calendar .

현재 시간을 얻으려면 예를 들어 Calendar.DateTime.now("America/Los_Angeles")Los Angeles Calendar.DateTime.now_utc의 현재 시간 또는 UTC의 현재 시간에 사용합니다.


유닉스 타임 스탬프를 얻으려면

DateTime.to_unix(DateTime.utc_now)

밀리 초 (Unix Timestamp) 수를 얻으려면 :

DateTime.utc_now() |> DateTime.to_unix(:millisecond)

참고 URL : https://stackoverflow.com/questions/28594646/getting-the-current-date-and-or-time-in-elixir

반응형