supposant que le fuseau horaire est CST. J'ai un service Web qui renvoie un la valeur de java.util.date code> comme "2020-03-14" code>. Je veux le convertir en offsetDateTetime code> dans le format "2020-03-14 05: 59: 59.99999990 +00: 00" code>. Le code ci-dessous n'a pas l'information de temps. offsedenddt code> est 2020-03-14t05: 00z code> p> p> p>
3 Réponses :
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
@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 CODE> (sept S code>) (Dit Sini sans connaître l'importance de cela pour le questionneur).
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());
Merci d'avoir posté votre propre solution de travail. C'est plus compliqué que nécessaire, principalement parce que vous utilisez la classe code> calendrier code>. 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 code> à un instantané code> 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.
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
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 i> à un point de temps exclusif i> 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 code>, il ressemble plus à unjava.sql.date code>, pourrait-il s'agir? Votre exemple de format recherché est égal à2020-03-14t00: 59: 59.9999999-05: 00 [America / Chicago] Code>, 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 b>, où le début est inclusif i> pendant que la fin est exclusive i> . 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 code> classe dans la bibliothèque Thraeten-Extra i> qui s'étend java.time i> fonctionnalité.