0
votes

Comment obtenir la fin de la journée en tant que compensation de datéme au format 2019-12-29 05: 59: 59.99999990 +00: 00?

supposant que le fuseau horaire est CST. J'ai un service Web qui renvoie un java.util.date comme "2020-03-14" . Je veux le convertir en offsetDateTetime dans le format "2020-03-14 05: 59: 59.99999990 +00: 00" . Le code ci-dessous n'a pas l'information de temps. xxx

la valeur de offsedenddt est 2020-03-14t05: 00z


2 commentaires

Par CST Avez-vous entendu dire l'heure normale centrale australienne, l'heure normale nord-américaine, la Chine Time ou Cuba Standard Time? Envisagez d'utiliser un intervalle demi-ouvert, d'un point dans le temps inclus à un point de temps exclusif et épargnez-vous tous les 9 (et la tâche sans espoir de décider combien de ils vous voulez). Lorsque vous dites 2020-03-14 , il ressemble plus à un java.sql.date , pourrait-il s'agir? Votre exemple de format recherché est égal à 2020-03-14t00: 59: 59.9999999-05: 00 [America / Chicago] , mais c'est plus proche du début que la fin de cette journée? Précisez s'il vous plaît.


CONSEIGNE: Vous voudrez peut-être en savoir plus sur la gestion des effectifs de temps en utilisant l'approche demi-ouverte , où le début est inclusif pendant que la fin est exclusive . Plutôt que d'identifier un dernier moment divisible infiniment, vous courez mais n'incluez pas le premier moment du lendemain. Overflow de la pile de recherche est-ce a été couvert plusieurs fois. Astuce supplémentaire: intervalle classe dans la bibliothèque Thraeten-Extra qui s'étend java.time fonctionnalité.


3 Réponses :


2
votes

Un offsetDateTime code> n'a pas de format lui-même, il contient les informations sur la date et l'heure. Si vous créez un offsetDateTime code> juste à partir d'une date, il obtiendra les informations de temps par défaut de 0 heure, minutes, secondes et nanos.
Vous pouvez le produire dans divers formats à l'aide d'un DateTimeformatter CoRe> et créer une nouvelle instance de offsetDateTime code> Ajout d'unités temporelles à une personne existante comme ceci:

2020-03-14T00:00:00.000000000 +00:00
2020-03-14T23:59:59.999999000 +00:00


2 commentaires

@dehaar J'ai utilisé votre réponse comme référence. Les lignes de code ci-dessous servent le but. Date enddt = someservice.getenddate (); Calendrier cal = calendrier.getinstance (); cal.settime (ENDDT); int an = cal.get (calendrier.year); int mois = cal.get (calendrier.month); int Day = cal.get (calendrier.day_of_month); OffsetDateTetime edt = offsetdatetime.of (année, mois + 1, jour, 23,59,59 99999999 000, compensation DateTime.now (). Tozon EddateTime (). Gooffs et ());


Nice, merci. Si vous voulez 05: 59: 59.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999: Utilisez HH: MM: SS.SSSSSSSS (sept S ) (Dit Sini sans connaître l'importance de cela pour le questionneur).



0
votes

Les lignes de code ci-dessous ont fonctionné.

Date enddt = someService.getEndDate();
Calendar cal = Calendar.getInstance();
cal.setTime(enddt);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
OffsetDateTime edt = OffsetDateTime.of(year,month+1,day,23,59,59,999999000,OffsetDateTime.now().toZonedDateTime().getOffset());


1 commentaires

Merci d'avoir posté votre propre solution de travail. C'est plus compliqué que nécessaire, principalement parce que vous utilisez la classe calendrier . Cette classe est mal conçue et bien dépassée, et il n'ya absolument aucune raison de l'utiliser ici. Je recommande que vous convertissiez plutôt votre date à un instantané et effectuez le travail restant en Java.time. C'est tellement plus agréable de travailler avec et vous donnera un code plus naturel et lisible.



1
votes

Permettez-moi d'abord de suggérer que vous représentaez la fin de votre intervalle pas em> comme un microseconde avant le début du jour suivant, mais comme em> le premier moment du lendemain exclusif em>. Donc, un point à temps est à l'intérieur de votre intervalle s'il est strictement em> avant votre heure de fin. Ceci est philosophiquement plus correct. Et il exclut la possibilité d'exclure faussement un point à temps au cours des 999 derniers nanosecondes de la journée à partir de votre intervalle.

End: 2020-03-14T23:59:59.999999-05:00


0 commentaires