अमृत ​​में वर्तमान तिथि और समय प्राप्त करना


83

यह वास्तव में गूंगा प्रश्न लगता है, लेकिन एलिक्सिर में वर्तमान दिनांक या समय को कैसे प्राप्त और प्रदर्शित करता है? मैंने डॉक्स के माध्यम से जाने की कोशिश की , लेकिन कुछ भी नहीं मिला। क्या मुझे एरलांग फ़ंक्शन का उपयोग करने की आवश्यकता है?

जवाबों:


56

ख़ास तौर से आपके प्रश्न का उत्तर देने (हालांकि मैं वास्तव में टाइमेक्स! उपयोग करने के लिए Onorio की सिफारिश की सराहना करते हैं), तो आपको Erlang मानक lib का उपयोग करने से वर्तमान दिनांक और समय प्राप्त कर सकते हैं :calendar.universal_time()या :calendar.local_time()। मॉड्यूल datetimeमें एर्लैंग के प्रकार के साथ काम करने के लिए कई उपयोगी कार्य हैं calendar, लेकिन वे कुछ हद तक सीमित हैं, और आपको पार्सिंग या स्वरूपण तिथियों के लिए कुछ भी प्रदान नहीं करते हैं, जो टाइमएक्स में आता है।


1
शानदार जवाब, आप दोनों को धन्यवाद और मैं निश्चित रूप से Timex की जांच करूंगा!
ग्राहम कॉनजेट


34

एर्लैंग 19.1 से:

:os.system_time(:millisecond)

एर्लैंग 18 से:

:os.system_time(:milli_seconds)

वर्तमान UNIX टाइमस्टैम्प UTC देता है।

धन्यवाद @HenrikN ब्लॉग पोस्ट को लिंक करने के लिए http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html



17

NaiveDateTime

यदि आप टाइमज़ोन के बारे में परवाह नहीं करते हैं और केवल शुद्ध दिनांक और समय चाहते हैं, तो उपयोग करें NaiveDateTime:

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

दिनांक और समय

यदि आप टाइमजोन विवरण चाहते हैं, तो उपयोग करें DateTime, जो टाइमजोन नाम, यूटीसी ऑफसेट, एसटीडी ऑफसेट, और ओजोन संक्षिप्त नाम जैसी चीजों को भी लौटाएगा:

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/1और to_time/1इन मॉड्यूल्स datetime structs से विशिष्ट दिनांक और समय मूल्यों को प्राप्त करने के लिए।


12

मुझे लगता है कि आपका सबसे अच्छा दांव एलिक्सिर के लिए पॉल स्कोनफेलर (उर्फ बिटवॉकर) टाइमेक्स लाइब्रेरी का उपयोग करना है। यह यहां है: https://github.com/bitwalker/timex और आप पैकेज को hex.pm https://hex.pm/packages/timex से प्राप्त कर सकते हैं । पॉल ने विनम्रतापूर्वक उस गीथूब रेपो के रीडमी पृष्ठ पर पुस्तकालय का उपयोग करने का एक अच्छा विवरण प्रदान किया।

आप मूल Erlang libs के लिए कॉल कर सकते हैं, लेकिन मुझे लगता है कि जब पॉल अमृत के साथ काम कर रहा है तो पॉल की देयता बेहतर है।


5
सिफारिश ओनोरियो के लिए धन्यवाद! इसे पढ़ने वाले किसी भी व्यक्ति के लिए, मैं योगदान के लिए बहुत खुला हूं, ताकि हम एलिक्सिर में दिनांक / समय के लिए लायब्रेरी में जाने के लिए Timex बना सकें, और शायद एक दिन इसे एलिक्सिर मानक पुस्तकालय में विलय कर दें यदि यह बराबर होना चाहिए। यदि आप मदद करने में रुचि रखते हैं, तो मुझे एक संदेश शूट करें या GitHub पर इश्यू ट्रैकर में गोता लगाएँ और कुछ पुल अनुरोध भेजें!
बिटवॉकर

1
@bitwalker हाँ, Erlang / Elixir में तारीख / समय परिवाद के लिए कई चीजें हैं। और मुझे आशा है कि टाइमेक्स को अमृत में भी मिलाया जा सकता है, :)
टोनी हान

11

यह निर्भर करता है कि आप इसे किस प्रारूप में चाहते हैं।

आप एलिक्जिर से एरलंग मानक पुस्तकालय में किसी भी फ़ंक्शन का उपयोग कर सकते हैं। परंपरागत रूप से, आपको now/0फ़ंक्शन के साथ समय मिलेगा :

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

यह time_t1,487,549,978.29683 का प्रतिनिधित्व करता है, जो सोमवार 20 फरवरी, 2017 को आधी रात के यूटीसी के बाद 19 मिनट, 38.29683 सेकंड है।

हालाँकि, Erlang / OTP 18 के बाद से, उस फ़ंक्शन को हटा दिया गया है; कारणों में से एक यह है कि एर्लैंग गारंटी देता है कि वापसी मूल्य हर कॉल में वृद्धि करेगा। यदि इसे मशीन पर एक तंग पाश में बुलाकर तेजी से एक बार माइक्रोसेकंड से अधिक बार कॉल किया जाता है, तो लौटा टाइमस्टैम्प वास्तविक समय से आगे निकल जाएगा।

प्रतिस्थापन अधिक सटीक और नियंत्रण के साथ एक एपीआई है । इस नए एपीआई के लिए प्राथमिक इंटरफ़ेस os:system_time/0फ़ंक्शन है, जो सिस्टम-डिफाइंड यूनिट में युगीन समय देता है:

iex(2)> :os.system_time
1487549978296838000

आप एक विशिष्ट इकाई के साथ अनुरोध कर सकते हैं system_time/1, हालांकि:

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

अमृत ​​1.2 के बाद से, उन कार्यों को मूल Systemमॉड्यूल में भी उपलब्ध किया गया है :

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

अधिक अनुकूल लेकिन अभी भी एलिक्जिर-देशी इंटरफ़ेस के लिए, calendarमॉड्यूल का उपयोग करें , जो आपको टुपल्स देगा:

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

1.3 के बाद से, एलिक्सिर के पास तारीखों और समय में हेरफेर करने के लिए अपने खुद के मॉड्यूल भी हैं: Dateऔर DateTime। आप वर्तमान तिथि या समय प्राप्त करने के लिए इसके कार्यों का उपयोग कर सकते हैं:

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

8

मिलीसेकंड की संख्या प्राप्त करने के लिए (यूनिक्स टाइमस्टैम्प):

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

1
नाइस वन सैम, बस मैं क्या देख रहा था;)
डेनिस

7

आप यूटीसी से :os.timestamp\0रिटर्न का उपयोग भी कर सकते हैं {megaseconds, seconds, microseconds}:os.timestamp |> :calendar.now_to_datetimeअब आप मानक {{YYYY, MM, DD}, {HH, MM, SS}}प्रारूप में दे देंगे ।


3
और उस POSIX / UNIX टाइमस्टैम्प में प्राप्त करने के लिए: michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html
हेनरिक एन

6

यदि आपको डेलाइट सेविंग टाइम या टाइम ज़ोन से निपटने की आवश्यकता है तो मैंने उसके लिए एक लाइब्रेरी बनाई: कैलेंडर

वर्तमान समय का उपयोग करने के लिए Calendar.DateTime.now("America/Los_Angeles")आप लॉस एंजिल्स Calendar.DateTime.now_utcमें वर्तमान समय के लिए या यूटीसी में वर्तमान समय के लिए उपयोग करेंगे ।


2

यूनिक्स टाइमस्टैम्प प्राप्त करने के लिए

DateTime.to_unix(DateTime.utc_now)

0

खैर, बचाव के लिए Timex आमतौर पर, हालांकि नीचे दिए गए कुछ ट्रिक्स मदद के हो सकते हैं:

{erl_date, erl_time} = :calendar.local_time()
# {{2020, 11, 19}, {0, 6, 36}}

{:ok, time} = Time.from_erl(erl_time)
# {:ok, ~T[00:06:36]}

{:ok, date} = Date.from_erl(erl_date)
# {:ok, ~D[2020-11-19]}

Calendar.strftime(time, "%c", preferred_datetime: "%H:%M:%S")
# "00:06:36"


Calendar.strftime(date, "%c", preferred_datetime: "%m-%d-%Y")
# "11-19-2020"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.