Convertir en millisecondes sur la face avant Lors de l'envoi des informations de temps à l'API backend Vous devez tenir compte de l'heure d'été.
Si vous le convertissez avec une méthode Java, il gérera l'heure d'été, C'est parce que javascript ne le gère pas.
Dans cet article, comment Java gère l'heure d'été Je vais vous dire les spécifications détaillées de la conversion.
L'anniversaire d'une personne née pendant la période estivale Un événement affiché un jour de congé s'est produit.
1 heure lors de l'inscription / référence pendant l'heure d'été Il est nécessaire d'ajouter et de soustraire des millisecondes.
La période d'introduction de l'heure d'été au Japon est la suivante.
Année | Heure de début | Heure de fin |
---|---|---|
1948 (Showa 23) | Le 2 mai(journée)2 heures du matin | 9月11journée(sol)2 heures du matin |
1949 (Showa 24) | 3 avril(journée)2 heures du matin | 9月10journée(sol)2 heures du matin |
1950 (1950) | 7 mai(journée)2 heures du matin | 9月9journée(sol)2 heures du matin |
1951 (Showa 26) | 6 mai(journée)2 heures du matin | 9月8journée(sol)2 heures du matin |
Pour entrer l'heure d'été à 2 h 00 le lundi 2 mai L'heure est avancée d'une heure et la milliseconde équivaut à 3h00 du matin.
** Source de vérification **
SummerTime.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SummerTime {
public static void main(String[] args) throws ParseException {
convertToMilliseconds("1948-05-02 02:00:00");
convertToMilliseconds("1948-05-02 03:00:00");
}
private static void convertToMilliseconds(String dateStr) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatter.parse(dateStr);
System.out.println(dateStr + " -> " + date.getTime());
}
}
** Résultat de sortie **
1948-05-02 02:00:00 -> -683794800000
1948-05-02 03:00:00 -> -683794800000
La conversion à 2h00 du matin est la suivante.
1948-05-02 02:00:00 -> -683794800000
1948-05-02 02:00:01 -> -683794799000
1948-05-02 02:00:02 -> -683794798000
・
・
・
1948-05-02 02:59:58 -> -683791202000
1948-05-02 02:59:59 -> -683791201000
1948-05-02 03:00:00 -> -683794800000
De 2: 59: 59: 999 à 3h00 Je comprends les spécifications à corriger. Cependant, il n'y a pas 2h00 du matin pendant l'heure d'été. On ne s'attend pas à ce que la conversion en millisecondes entre 2 et 3 heures soit utilisée.
Pour sortir de l'heure d'été à 1h du matin le lundi 11 septembre L'heure doit être rétablie d'une heure.
1948-09-11 00:59:59 -> -672397201000
1948-09-11 01:00:00 -> -672393600000
La différence est de 1 seconde dans la notation de la date et de l'heure, En millisecondes, il est corrigé à 3601000 millisecondes.
Revenons maintenant à la notation de la date et de l'heure à partir de la milliseconde.
** Source de vérification **
SummerTime.java
private static void convertToTimeFormat(Long milliSeconds) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = formatter.format(milliSeconds);
System.out.println(milliSeconds + " -> " + dateStr);
}
** Résultat de sortie **
-683794801000 -> 1948-05-02 01:59:59
-683794800000 -> 1948-05-02 03:00:00
-683794799000 -> 1948-05-02 03:00:01
-672397201000 -> 1948-09-11 00:59:59
-672397200000 -> 1948-09-11 01:00:00
-672397199000 -> 1948-09-11 01:00:01
・
・
・
-672393601000 -> 1948-09-11 01:59:59
-672393600000 -> 1948-09-11 01:00:00
-672393599000 -> 1948-09-11 01:00:01
Les spécifications sont telles que le niveau 1 heure du matin arrive deux fois.
Lors de la conversion à l'avant, corrigez la milliseconde de la période correspondante Correction de l'envoi des informations de temps à l'API.
dateUtil.ts
/**
*Obtenir l'heure en tenant compte de l'heure d'été (convertie lorsqu'elle est affichée de l'API vers l'avant)
*/
export function getSummerTimeDate(birthDate){
let birth = Number(birthDate)
if ((birth >= -683794800000 && birth <= -672393600001)
|| (birth >= -654764400000 && birth <= -640944000001)
|| (birth >= -620290800000 && birth <= -609494400001)
|| (birth >= -588841200000 && birth <= -578044800001)) {
birth += 3600000
}
return birth
}
/**
*Heure de remplacement en tenant compte de l'heure d'été (convertie lors de l'inscription de front à API)
*/
export function setSummerTimeDate(birthDate){
let birth = Number(birthDate)
if ((birth >= -683791200000 && birth <= -672390000001)
|| (birth >= -654760800000 && birth <= -640940400001)
|| (birth >= -620287200000 && birth <= -609490800001)
|| (birth >= -588837600000 && birth <= -578041200001)) {
birth -= 3600000
}
return birth
}
Je pense qu'il vaut mieux se demander s'il faut gérer l'heure à laquelle l'heure d'été est introduite au stade de l'examen des spécifications. De plus, je pense que nous devrions considérer séparément comment l'éviter, comme utiliser UTC pour le fuseau horaire.
Heure d'été et Java japonais À propos de l'heure d'été réelle
Recommended Posts