Ich habe das Scala-Dokument für die Klasse Diese Klasse ist nicht als allgemeine Darstellung der Zeit gedacht, sie ist für die Bedürfnisse von scala.concurrent optimiert. Warum sind die Auswirkungen dieser Aussage? Was ist eine bessere Alternative? scala.concurrent.duration.Duration
Ich denke, ich bin teilweise dafür verantwortlich.
Das allgemeine Problem hier ist, dass das Zeitsystem schwierig ist. Wirklich, wirklich, wirklich hart.
Die Akka-Entwickler, die an der Standardisierung von Futures arbeiteten, benötigten ein Konstrukt, um die Länge zwischen zwei "anonymen" Zeitpunkten zu beschreiben, um ihre Funktionalität zu implementieren. Duration
wurde erstellt, um diese spezifische Anforderung zu erfüllen.
Meine Sorge war, dass Leute diese zeitbezogene Klasse für Dinge verwenden könnten, die nicht dazu gedacht waren, uns in eine problematische Situation zu bringen, die mit java.util.Date
/ java.util.Calendar
vergleichbar ist (nicht weil Duration
tatsächlich für sie arbeitet Anwendungsfall, wo viele Menschen es als eine Art von% missbrauchen, die es nie sein sollte.
Deshalb hat es diese Notiz und ist in scala.time
anstelle von e verpackt. G. scala.concurrent.duration
.
Ich freue mich auf das Paket " scala.time
", das mit Java 8 geliefert wird. Es könnte in Zukunft möglich sein, dies zu standardisieren, was die Interoperabilität ein wenig verbessern würde und den zusätzlichen Vorteil hätte, dass es für einen viel breiteren Anwendungsfall ausgelegt wäre . (Es wird wahrscheinlich noch lange dauern, bis Scala Java 8 als Basis verwendet, aber ...)
Die Zeit kann je nach Bedarf auf verschiedene Arten dargestellt werden. Ich persönlich habe benutzt:
Long
- viele Tools nehmen es direkt Aktualisiert : java.time.*
dank @Vladimir Matveev
Das Paket wurde vom Autor von Joda Time (Stephen Colebourne) entworfen. Er sagt, es ist besser gestaltet.
java.util.Date
Getrennte Klassenhierarchie:
%Vor%Geordnete Zeitdarstellung:
%Vor% Modellzeit. Ich hatte einmal ein globales Objekt Timer
mit var currentTime:Long
:
Und überall im Programm habe ich Timer.currentTimeMs
aufgerufen, um die Zeit zu bekommen. Es erlaubt deterministische Tests mit kontrollierter Zeitverschiebung zu schreiben. (Vorsicht vor globalen Variablen! Jetzt bevorzuge ich separate Instanzen von Timer
, um Nebenläufigkeitsprobleme zu vermeiden.)
Tags und Links scala java-8 concurrency time duration