यह वास्तव में गूंगा प्रश्न लगता है, लेकिन एलिक्सिर में वर्तमान दिनांक या समय को कैसे प्राप्त और प्रदर्शित करता है? मैंने डॉक्स के माध्यम से जाने की कोशिश की , लेकिन कुछ भी नहीं मिला। क्या मुझे एरलांग फ़ंक्शन का उपयोग करने की आवश्यकता है?
जवाबों:
ख़ास तौर से आपके प्रश्न का उत्तर देने (हालांकि मैं वास्तव में टाइमेक्स! उपयोग करने के लिए Onorio की सिफारिश की सराहना करते हैं), तो आपको Erlang मानक lib का उपयोग करने से वर्तमान दिनांक और समय प्राप्त कर सकते हैं :calendar.universal_time()
या :calendar.local_time()
। मॉड्यूल datetime
में एर्लैंग के प्रकार के साथ काम करने के लिए कई उपयोगी कार्य हैं calendar
, लेकिन वे कुछ हद तक सीमित हैं, और आपको पार्सिंग या स्वरूपण तिथियों के लिए कुछ भी प्रदान नहीं करते हैं, जो टाइमएक्स में आता है।
आप DateTime.utc_now/0
UTC DateTime प्राप्त करने के लिए उपयोग कर सकते हैं ।
एर्लैंग 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
यदि आप टाइमज़ोन के बारे में परवाह नहीं करते हैं और केवल शुद्ध दिनांक और समय चाहते हैं, तो उपयोग करें 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 से विशिष्ट दिनांक और समय मूल्यों को प्राप्त करने के लिए।
मुझे लगता है कि आपका सबसे अच्छा दांव एलिक्सिर के लिए पॉल स्कोनफेलर (उर्फ बिटवॉकर) टाइमेक्स लाइब्रेरी का उपयोग करना है। यह यहां है: https://github.com/bitwalker/timex और आप पैकेज को hex.pm https://hex.pm/packages/timex से प्राप्त कर सकते हैं । पॉल ने विनम्रतापूर्वक उस गीथूब रेपो के रीडमी पृष्ठ पर पुस्तकालय का उपयोग करने का एक अच्छा विवरण प्रदान किया।
आप मूल Erlang libs के लिए कॉल कर सकते हैं, लेकिन मुझे लगता है कि जब पॉल अमृत के साथ काम कर रहा है तो पॉल की देयता बेहतर है।
यह निर्भर करता है कि आप इसे किस प्रारूप में चाहते हैं।
आप एलिक्जिर से एरलंग मानक पुस्तकालय में किसी भी फ़ंक्शन का उपयोग कर सकते हैं। परंपरागत रूप से, आपको now/0
फ़ंक्शन के साथ समय मिलेगा :
iex(1)> :erlang.now
{1487, 549978, 29683}
यह time_t
1,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>
मिलीसेकंड की संख्या प्राप्त करने के लिए (यूनिक्स टाइमस्टैम्प):
DateTime.utc_now() |> DateTime.to_unix(:millisecond)
आप यूटीसी से :os.timestamp\0
रिटर्न का उपयोग भी कर सकते हैं {megaseconds, seconds, microseconds}
। :os.timestamp |> :calendar.now_to_datetime
अब आप मानक {{YYYY, MM, DD}, {HH, MM, SS}}
प्रारूप में दे देंगे ।
यदि आपको डेलाइट सेविंग टाइम या टाइम ज़ोन से निपटने की आवश्यकता है तो मैंने उसके लिए एक लाइब्रेरी बनाई: कैलेंडर ।
वर्तमान समय का उपयोग करने के लिए Calendar.DateTime.now("America/Los_Angeles")
आप लॉस एंजिल्स Calendar.DateTime.now_utc
में वर्तमान समय के लिए या यूटीसी में वर्तमान समय के लिए उपयोग करेंगे ।
खैर, बचाव के लिए 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"