स्केल में दिनांक और समय के साथ काम करने का मानक तरीका क्या है? क्या मुझे जावा प्रकारों का उपयोग करना चाहिए या देशी स्काला विकल्प हैं?


161

स्केल में दिनांक और समय के साथ काम करने का मानक तरीका क्या है? क्या मुझे जावा प्रकार का उपयोग करना चाहिए जैसे कि java.util.Date या देशी स्काला विकल्प?

जवाबों:


129

जावा एसई 8 के बाद से, उपयोगकर्ताओं को java.time (JSR-310) पर माइग्रेट करने के लिए कहा जाता है। वहाँ scala के लिए scala पुस्तकालयों java.time, जैसे scala- समय बनाने के लिए प्रयास कर रहे हैं । यदि SE 8 से कम लक्ष्यीकरण नीचे दिए गए किसी एक का उपयोग करता है। यह भी देखें कि JSR-310 क्यों Joda-Time नहीं है


Joda Time के लिए एक नया Scala आवरण । यह परियोजना स्काला-टाइम से आगे निकली क्योंकि ऐसा लगता है कि स्काला-टाइम का अब कोई रखरखाव नहीं है।

import com.github.nscala_time.time.Imports._

DateTime.now // returns org.joda.time.DateTime = 2009-04-27T13:25:42.659-07:00

DateTime.now.hour(2).minute(45).second(10) // returns org.joda.time.DateTime = 2009-04-27T02:45:10.313-07:00

DateTime.now + 2.months // returns org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00

DateTime.nextMonth < DateTime.now + 2.months // returns Boolean = true

DateTime.now to DateTime.tomorrow  // return org.joda.time.Interval = > 2009-04-27T13:47:14.840/2009-04-28T13:47:14.840

(DateTime.now to DateTime.nextSecond).millis // returns Long = 1000

2.hours + 45.minutes + 10.seconds
// returns com.github.nscala_time.time.DurationBuilder
// (can be used as a Duration or as a Period)

(2.hours + 45.minutes + 10.seconds).millis
// returns Long = 9910000

2.months + 3.days
// returns Period

Joda Time एक अच्छी Java लाइब्रेरी है, Jorge Ortiz द्वारा बनाए गए scala-time में Joda Time के लिए Scala आवरण / अंतर्निहित रूपांतरण लाइब्रेरी उपलब्ध है । (नोट इम्पीचिट्स में एक प्रदर्शन हिट है, लेकिन यह इस बात पर निर्भर करता है कि आप क्या करते हैं यदि आप नोटिस करेंगे। और यदि आप एक प्रदर्शन समस्या में भाग लेते हैं, तो आप बस जोडा इंटरफ़ेस पर वापस लौट सकते हैं)

README से:

USAGE:
  import org.scala_tools.time.Imports._

  DateTime.now
  // returns org.joda.time.DateTime = 2009-04-27T13:25:42.659-07:00

  DateTime.now.hour(2).minute(45).second(10)
  // returns org.joda.time.DateTime = 2009-04-27T02:45:10.313-07:00

  DateTime.now + 2.months
  // returns org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00

  DateTime.nextMonth < DateTime.now + 2.months
  // returns Boolean = true
  DateTime.now to DateTime.tomorrow
  // return org.joda.time.Interval =
  //   2009-04-27T13:47:14.840/2009-04-28T13:47:14.840

  (DateTime.now to DateTime.nextSecond).millis
  // returns Long = 1000

  2.hours + 45.minutes + 10.seconds
  // returns org.scala_tools.time.DurationBuilder
  // (can be used as a Duration or as a Period)

  (2.hours + 45.minutes + 10.seconds).millis
  // returns Long = 9910000 

  2.months + 3.days
  // returns Period

4
वीडियो स्कैल्पल: जावा लाइब्रेरीज़ डेज़2010.scala-lang.org/node/138/164 के
ऑल्यूज़

धन्यवाद, मैं इस आवरण के बारे में नहीं जानता।
वादिम शेंडर

मुझे इससे एक स्वरूपित आउटपुट नहीं मिल सकता है। अगर मैं DateTime.formatted ("yyyyMMdd") का उपयोग करता हूं, तो मुझे प्रतिक्रिया के रूप में बस सादा "yyyyMMdd" (इसी संख्याओं के साथ प्रतिस्थापित नहीं किए गए अक्षर) मिलते हैं। अगर मैं DateTime.formatted (DateTimeFormat.forPattern ("yyyyMMdd") का उपयोग करता हूं) - मुझे एक स्ट्रिंग तर्क के लिए पूछने में त्रुटि मिलती है।
इवान

1
चूंकि ऐसा लगता है कि स्केला-टाइम अब नहीं है, इसलिए इसे nscala-time (जो कि स्कैला-टाइम के विपरीत काम करता है, स्कैला 2.10 के साथ दिया गया है)। यह github.com/nscala-time/nscala-time पर पाया जा सकता है ।
सेबेस्टियन गैन्सलैंड्ट

1
साथ उनकी समस्या को समझ नहीं सकता Importsऔर scala.concurrent.duration._। इसके बजाय सादे JodaTime का इस्तेमाल किया और इस पर खुद की साइकिल लिखी।
किसिलीनो

12

यदि आप Java 8 का उपयोग कर रहे हैं, तो nscalaअब और उपयोग करने की कोई आवश्यकता नहीं है। java.timeपैकेज (JSR-310) के तहत Joda-Time लाइब्रेरी को Java 8 में स्थानांतरित कर दिया गया है । बस उस पैकेज को अपने स्काला प्रोजेक्ट में आयात करें।


1
वह सत्य नहीं है। जावा -8 => दो अलग-अलग API पर स्विच करते समय Joda-Time-code को माइग्रेट / एडजस्ट करना पड़ता है!
Meno Hochschild

7

स्काला में तारीखों के साथ काम करने का कोई मानक तरीका नहीं है । उपलब्ध विकल्प हैं:

  1. Java.time का उपयोग करें (यदि आप जावा 8 का उपयोग कर रहे हैं) क्योंकि इसमें जोडा का सबसे अच्छा समय निर्मित है। कोई आक्षेप नहीं।
  2. Nscala- समय का उपयोग करें।
  3. लैम्मा तिथि पुस्तकालय (दृश्य पर अपेक्षाकृत नया पुस्तकालय)

मैं java.util का उपयोग करने से बचूंगा। इसके आसपास के अच्छी तरह से प्रलेखित मुद्दों के कारण।


5

प्रेरणा:

जावा तिथि और कैलेंडर लाइब्रेरी काफी हद तक अपर्याप्त हैं। वे उत्परिवर्तनीय हैं, धागा-सुरक्षित नहीं हैं, और उपयोग करने के लिए बहुत असुविधाजनक है।

जोडा टाइम लाइब्रेरी जावा की तारीख और कैलेंडर कक्षाओं के लिए एक महान प्रतिस्थापन है। वे डिफ़ॉल्ट रूप से अपरिवर्तनीय हैं, एक बहुत अमीर और अच्छे एपीआई हैं, और जब आवश्यक हो आसानी से जावा की तिथि और कैलेंडर कक्षाओं में परिवर्तित किया जा सकता है।

यह परियोजना जोडा टाइम लाइब्रेरी के आसपास सुविधा की एक पतली परत प्रदान करती है, जिससे उन्हें स्काला के भीतर उपयोग करने के लिए अधिक मुहावरेदार बना दिया जाता है।

( https://github.com/jorgeortiz85/scala-time से कॉपी किया गया )


3

हर कोई JodaTime का उपयोग करता है, इन Scala हेल्पर / रैपर पुस्तकालयों को Scala के नए संस्करणों के साथ पुन: संकलन की आवश्यकता हो सकती है। जोडाटाइम एकमात्र पुस्तकालय है जो लंबे समय से आसपास है, और स्थिर है और स्कैला के हर संस्करण के साथ मज़बूती से काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.