Scala'daki tarih ve saatlerle çalışmanın standart yolu nedir? Java türlerini kullanmalı mıyım yoksa yerel Scala alternatifleri var mı?


161

Scala'daki tarih ve saatlerle çalışmanın standart yolu nedir? Java.util.Date gibi Java türlerini kullanmalı mıyım yoksa yerel Scala alternatifleri var mı?

Yanıtlar:


129

Java SE 8'den itibaren, kullanıcıların java.time (JSR-310) sürümüne geçmeleri istenir. Skala zamanı gibi skala için java.time'ı saran skala kitaplıkları oluşturma çabaları vardır . SE 8'den düşük hedefleme varsa aşağıdakilerden birini kullanın. Ayrıca bkz.JSR-310 neden Joda-Time değildir


Joda Time için yeni bir Scala sarıcı . Bu proje, skala süresinin artık korunmadığı için skala zamanından çatallandı.

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 Zaman iyi Java kütüphanesidir en Joda Time için Scala sarıcı / örtük dönüştürme kütüphanesi DAİREMİZ vardır Scala-zaman yarattığı Jorge Ortiz . (Not etkilerinin performans isabeti vardır, ancak fark ederseniz ne yaptığınıza bağlıdır. Bir performans sorunuyla karşılaşırsanız, Joda arayüzüne geri dönebilirsiniz)

README'den:

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
Video scalaj: Java Kütüphaneleri için Deyimsel Scala Sarmalayıcıları days2010.scala-lang.org/node/138/164
oluies

Teşekkürler, bu ambalajı bilmiyorum.
Vadim Shender

Bundan biçimlendirilmiş bir çıktı alamıyorum. DateTime.formatted ("yyyyMMdd") kullanırsam yanıt olarak düz "yyyyMMdd" (karşılık gelen sayılarla değiştirilmeyen harfler) alırım. DateTime.formatted (DateTimeFormat.forPattern ("yyyyMMdd")) kullanırsam - dize argümanı sorarken bir hata alıyorum.
Ivan

1
Skala süresi artık korunmadığından, nscala zamanı (skala zamanının aksine skala 2.10 ile çalışır) yerini almıştır. Bunu github.com/nscala-time/nscala-time adresinde bulabilirsiniz .
Sebastian Ganslandt

1
Onların Importsve ile sorunu anlayamıyorum scala.concurrent.duration._. Bunun yerine düz JodaTime kullanıldı ve üzerine kendi bisikletleri yazdı.
kisileno

12

Java 8 kullanıyorsanız, nscalaartık kullanmaya gerek yoktur . Joda-Time kütüphanesi Java JS-8 java.time(JSR-310) paketi altında taşındı Bu paketi Scala projenize aktarın.


1
Bu doğru değil. Java-8 => iki farklı API'ya geçiş yapılırken Joda-Time kodu taşınmalı / ayarlanmalıdır!
Meno Hochschild

7

Scala'da tarihlerle çalışmanın standart bir yolu yoktur . Mevcut seçenekler:

  1. İçinde yerleşik JODA zamanı en iyi olduğu için java.time (Java 8 kullanıyorsanız) kullanın. Etkisi yok.
  2. Nscala-time kullanın.
  3. Lamma tarih kütüphanesi (sahnede nispeten yeni kütüphane)

Onu çevreleyen iyi belgelenmiş sorunları nedeniyle java.util.Date kullanmaktan kaçınır.


5

MOTİVASYON:

Java Date ve Calendar kitaplıkları büyük ölçüde yetersizdir. Değişken, iplik güvenli değil ve kullanımı çok rahatsız edici.

Joda Time kütüphanesi, Java'nın Tarih ve Takvim sınıflarının yerini almıştır. Varsayılan olarak değiştirilemezler, çok daha zengin ve daha güzel bir API'ye sahiptirler ve gerektiğinde kolayca Java'nın Tarih ve Takvim sınıflarına dönüştürülebilirler.

Bu proje, Joda Time kütüphaneleri çevresinde ince bir rahatlık katmanı sunarak Scala'da daha deyimsel bir kullanım sağlıyor.

( https://github.com/jorgeortiz85/scala-time adresinden kopyalandı )


3

Herkes JodaTime kullanıyor, bu Scala yardımcı / sarmalayıcı kütüphanelerinin Scala'nın yeni sürümleriyle yeniden derlenmesi gerekebilir. Jodatime, uzun zamandır var olan ve istikrarlı olan ve Scala'nın her sürümünde güvenilir bir şekilde çalışan tek zaman kütüphanesidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.