2013-09-08 34 views

Odpowiedz

4

Czas można przedstawić na różne sposoby w zależności od potrzeb. Ja osobiście używane:

  1. Long - wiele narzędzi wziąć go bezpośrednio
  2. Updated: java.time.* dzięki @Vladimir Matveev

    Pakiet został zaprojektowany przez autora Joda Time (Stephen Colebourne). He says jest lepiej zaprojektowany.

  3. Joda Time

  4. java.util.Date

  5. Oddzielna hierarchia klas:

    trait Time 
    case class ExactTime(timeMs:Long) extends Time 
    case object Now extends Time 
    case object ASAP extends Time 
    case class RelativeTime(origin:Time, deltaMs:Long) extends Time 
    
  6. Zamówione reprezentacja czasu:

    case class History[T](events:List[T]) 
    
  7. Czas modelu. Raz miałem globalny obiekt Timer z var currentTime:Long:

    object Timer { 
        private var currentTimeValue:Long 
        def currentTimeMs = currentTimeValue 
        def currentTimeMs_=(newTime:Long) { ... some checks and notifications} 
        def pseudoRandom:Double = ... 
    } 
    

    i wszędzie w programie nazwałem Timer.currentTimeMs aby uzyskać czas. Pozwala pisać testy deterministyczne z kontrolowanym przesunięciem czasowym. (Beware of zmiennej globalnej! Teraz wolę używać oddzielnych instancji Timer aby uniknąć problemów współbieżności.)

+2

Ustawiłbym Czas Jody na pierwszą pozycję na liście. I nie jest to 'java.util.Date', które można użyć w Javie 8, to pakiety' java.time. * '. –

+0

Istnieje również czas wykorzystania Twittera, ale nadal zastanawiam się, kiedy należy skorzystać z jednego lub drugiego. – Mortimer

4

Chyba jestem częściowo odpowiedzialny za to.

Generalnym problemem jest to, że system czasu jest trudny. Naprawdę, naprawdę, naprawdę ciężko.

Programiści firmy Akka, którzy pracowali nad standaryzacją kontraktów Futures, potrzebowali konstrukcji, aby opisać długość między dwoma "anonimowymi" punktami w czasie w celu wdrożenia ich funkcjonalności. Duration został zbudowany w celu rozwiązania tego konkretnego wymagania.

Moim problemem było to, że ludzie mogą zacząć używać tej klasy związane z czasem rzeczy nie było przeznaczone do wprowadzenia nas w kłopotliwej sytuacji porównywalnej do java.util.Date/java.util.Calendar (nie całkiem, bo Duration faktycznie działa na jego wykorzystanie literami), gdzie tony ludzi nadużyłyby go jako jakiegoś rodzaju, którego nigdy nie zamierzano.

Dlatego ma tę notatkę i jest pakowany pod numer scala.concurrent.duration zamiast e. sol. scala.time.

Z niecierpliwością oczekuję na przesyłkę paczkową java.time z językiem Java 8. Możliwe, że w przyszłości uda się ją ujednolicić, co poprawiłoby nieco interoperacyjność i przyniosłoby dodatkową korzyść w postaci znacznie szerszego zastosowania. (Prawdopodobnie zajmie to dużo czasu, zanim Scala użyje Java 8 jako linii bazowej, chociaż ...)

+0

Dziękuję za odpowiedź, wciąż zastanawiam się, czy istnieją konkretne przykłady tego, co powinieneś * nie * robić z Duration? – Mortimer