tl; dr
Duration.ofHours(11L)
.plusMinutes(29L)
.plusSeconds(54L)
.plusMillis(999L)
.toMillis()
Span-de-temps en fonction du temps de la journée
Votre question est confus . Une heure sans date n'a pas de sens par rapport à l'UTC. Nombre de millisecondes écoulées depuis la date de référence de l'époque Unix 1970-01-01T00:00:00Z
pour le suivi de la date et l'heure du jour.
Je suppose que vous êtes en train de faire face à une période de temps, et de ne pas gérer cela comme un moment de la journée. L'un est destiné à la chronologie, l'autre ne l'est pas.
Duration
Les classes java.time avec Java 8 et versions ultérieures comprennent Duration
pour le traitement de ces durées de temps non attaché à la ligne de temps. Ces méthodes prennent le type de données long
, d'où le L
suivant.
Duration d = Duration.ofHours(11L).plusMinutes(29L).plusSeconds(54L).plusMillis(999L) ;
Nombre de millisecondes
Vous avez demandé un nombre de millisecondes, donc voilà. Méfiez-vous de la perte de données, car Duration
comporte une résolution plus fine de quelques nanosecondes, ce qui vous permet d'éliminer une fraction de seconde plus fine lors de la conversion en millisecondes.
long millis = d.toMillis() ; // Converts this duration to the total length in milliseconds.
Mais je vous suggère de ne pas représenter de temps ni envergures moments sur la timeline en utilisant un décompte de millisecondes. Mieux vaut utiliser des objets ou du texte standardisé; continuer à lire.
ISO 8601
La norme définit les formats ISO 8601 pratiques sans ambiguïté pour représenter les valeurs date-heure sous forme de texte. Ce numéro comprend representation of durations Le format est PnYnMnDTnHnMnS
où le P
marque le début tandis que le T
sépare toute partie années-mois-jours de toute partie heures-minutes-secondes.
Les classes java.time utilisent par défaut les formats standard dans leurs méthodes parse
et toString
.
String output = d.toString() ;
PT11H29M54.999S
Voir cette code run live at IdeOne.com.
Vous pouvez directement analyser de telles chaînes dans java.time.
Duration d = Duration.parse("PT11H29M54.999S") ;
Je suggère d'utiliser ce format lorsque cela est possible, certainement lors de l'échange de données entre les systèmes.
Lorsque vous travaillez à l'intérieur de Java, transmettez les objets Duration
plutôt que de simples textes.
Timeline
Vous pouvez réaliser des opérations mathématiques date-heure avec les Duration
objets. Par exemple, prenez le moment actuel dans votre fuseau horaire et ajoutez les onze heures et demie.
ZoneId z = ZoneId.of("Pacific/Auckland") ;
ZonedDateTime now = ZonedDateTime.now(z) ;
ZonedDateTime later = now.plus(d) ;
now.toString(): 2017-09-27T07: 23: 31,651 + 13: 00 [Pacific/Auckland]
later.toString(): 2017-09-27T18: 53 : 26,650 + 13: 00 [Pacific/Auckland]
Pour les valeurs UTC, appelez toInstant
. La classe Instant
représente un moment sur la ligne temporelle en UTC avec une résolution de nanosecondes (plus fine que millisecondes).
Instant instant = later.toInstant() ;
Vous ne pouvez pas. L'unix epoch secondes est * "le nombre de secondes écoulées depuis l'époque unix (qui est' 1970-01-01T00: 00Z') "*. Si vous avez juste le temps et n'avez pas la date, comment pouvez-vous calculer cela? –
Un autre détail: 'toEpochMilli()' renvoie le nombre de ** millisecondes ** depuis unix epoch (pour obtenir les secondes, appelez 'getEpochSecond()' à la place). Et pour construire un 'ZonedDateTime', vous pouvez aussi faire' ZonedDateTime.of (LocalDate.now (zoneId) .atTime (11, 29, 20, 999 * 1000 * 1000), zoneId) '- un peu plus court que d'appeler' getYear() ',' getMonthValue() 'et ainsi de suite. –
@Hugo Merci. Nous ne pouvons pas obtenir l'époque millisecondes sans la date. Est-il possible de faire s'écouler les milises depuis minuit w.r.t UTC? – RGoyal