Convertir la date OLE (en secondes) en JJ.MM.AAAA HH:MM:SS (script)Salut la communauté JMP,
Aujourd'hui j'ai un défi particulier :
Dans JMP, j'ai des entrées numériques (vraisemblablement OLE, paramètres régionaux allemands, en secondes). Je connais les valeurs correctes correspondantes dans EXCEL, par exemple
EXCEL JMP
43717,479872 09.09.2019 11:31:01
43717,479902 09.09.2019 11:31:04
43717,479884 09.09.2019 11:31:02
Pourriez-vous me montrer un moyen JSL comment convertir ces entrées JMP (en secondes) dans le format datetime souhaité, comme indiqué dans la colonne EXCEL ? J'ai essayé plusieurs approches mais je n'arrive pas à comprendre.
Merci beaucoup!
Re : Convertir la date OLE (en secondes) en JJ.MM.AAAA HH:MM:SS (script)Merci @jthi pour la vidéo de Tom Scott : Parfait.
Il y a quelque chose dans la liste de souhaits : https://community.jmp.com/t5/JMP-Wish-List/Time-Zone-Conversion/idi-p/484479
Peut-être que cela nous aidera un jour.
Salutations, chrétien
Re : Convertir la date OLE (en secondes) en JJ.MM.AAAA HH:MM:SS (script)La vérification des fuseaux horaires est généralement très très délicate et sujette aux erreurs Le problème avec l'heure et les fuseaux horaires - Computerphile (youtube.com) . À ma connaissance, il n'y a pas de fonction intégrée dans JMP pour vérifier le fuseau horaire actuel.
Il peut y avoir des commandes powershell/ligne de commande pour obtenir le fuseau horaire du système d'exploitation et vérifier l'heure d'été. Après cela, vous pouvez utiliser Run Command() pour exécuter ces commandes et analyser le décalage correct et l'ajouter à la date/heure de JMP.
Re : Convertir la date OLE (en secondes) en JJ.MM.AAAA HH:MM:SS (script)Salut @Newbie2Jumpie ,
en fait, cela n'est vrai que pour les horodatages d'été. En hiver, les horodatages que vous créez sont en arrière de -1 heure.
J'ai exactement le même problème que vous et je reçois des données d'une balance vers une feuille de calcul Excel au format OLE.
J'étais frustré parce que toutes mes données semblaient être décalées d'une heure pendant les mois d'hiver.
@txnelson Existe-t-il un moyen (fonction JSL intégrée peut-être ?) De vérifier si un horodatage est en heure d'été ou d'hiver et d'ajouter/soustraire une heure ?
De toute évidence, de nombreux pays dans le monde ont cette fonctionnalité dans leur système : https://www.timeanddate.com/time/dst/2022.html
cela ne devrait donc pas être un problème uniquement en Allemagne ou en Suisse, où je me trouve.
On peut vérifier si l'horodatage est avant le dernier dimanche de mars à 2h00 ou après le dernier dimanche d'octobre à 3h00, mais c'est un peu délicat, n'est-ce pas ?
Cordialement,
Christian
Re : Convertir la date OLE (en secondes) en JJ.MM.AAAA HH:MM:SS (script)Ma soluce :
Approche du format Tx :
format(en jours(43717)-en jours(1)-en années(4) + .479872*en jours(1),"m/d/yh:m:s");
Mon approche de calcul (suppose que la chaîne de temps OLE est un caractère et
informations pertinentes extraites dans des champs utilitaires, non vérifiées :
nouvelle colonne("Mon_OLE",numérique,"continu",formule(format(en
jours(:"OLE_jours"-en jours(1)-en années(:"OLE_années") +
:"OLE_hhmmss"*indays(1),"d/m/yh:m:s"))) ;
Re : Convertir la date OLE (en secondes) en JJ.MM.AAAA HH:MM:SS (script)@Newbie2Jumpie
Vous avez raison ...... J'ai adopté la mauvaise approche en essayant de résoudre le problème.Les valeurs de date que vous avez sont en fait des valeurs de date/heure Excel.Ils sont basés sur le nombre de jours depuis le 01JAN1900, (43717) , pour les jours, et une proportion d'un jour, ( .479884 ), pour l'heure et ils commencent par le jour 1. La base JMP est le nombre de secondes depuis le 01JAN1904 et commence au jour 0. La formule de conversion est donc :
in days(43717)-in days(1)-in years(4) + .479872*indays(1)
Cela peut être affiché dans le JSL suivant
format(in days(43717)-in days(1)-in years(4) + .479872*indays(1),"m/d/y h:m:s");
format(in days(43717)-in days(1)-in years(4) + .479902*indays(1),"m/d/y h:m:s");
format(in days(43717)-in days(1)-in years(4) + .479884*indays(1),"m/d/y h:m:s");
format(in days(43717)-in days(1)-in years(4) + .479872*indays(1),"m/d/y h:m:s")
/*:
"09/09/2019 11:31:01 AM"
//:*/
format(in days(43717)-in days(1)-in years(4) + .479902*indays(1),"m/d/y h:m:s");
/*:
"09/09/2019 11:31:04 AM"
//:*/
format(in days(43717)-in days(1)-in years(4) + .479884*indays(1),"m/d/y h:m:s");
/*:
"09/09/2019 11:31:02 AM"
Re : Convertir la date OLE (en secondes) en JJ.MM.AAAA HH:MM:SS (script)L'arrière-plan est qu'il s'agit d'une valeur datetime spéciale basée sur OLE. Aussi loin que j'étais
dit qu'il semble être quelques secondes après 1900. EXCEL importe ces valeurs
correctement (exemples de valeurs à droite). JMP ne le fait pas.
Simplifions simplement :
Cela ne me dérange pas que le format d'affichage JMP éventuel soit américain, international,
ou européen. Le plus important est une conversion de travail à un plus
format de date/heure JMP lisible/commun. La colonne EXCEL montre ce que
résultat correct devrait ressembler.
BTW, les deux approches ne fonctionnent pas correctement. Les deux définissent toutes les entrées sur
09.09.2019 11:31:01.
Re : Convertir la date OLE (en secondes) en JJ.MM.AAAA HH:MM:SS (script)Pourriez-vous fournir plus d'informations sur les valeurs JMP en quelques secondes ?Si j'applique l'idée de Jim, les trois valeurs sont les mêmes.
jmp_list = {43717.479872, 43717.479902, 43717.479884};
excel_list = {};
for (i = 1, i <= nitems(jmp_list), i++,
one_dt = jmp_list[i];
// Add the number of seconds different from the JMPValue to the
// JMP date time value for 09.09.2019 11:31:01
jmp_dt = one_dt + 3650829743.52013;
// Display its value using a standard JMP format
dtc = Format( jmp_dt, "d/m/y h:m:s" ) ;
dtc = substitute(dtc, "/", ".");
excel_list[i] = dtc;
);
show(excel_list);
excel_list = {"09.09.2019 11:31:01 AM", "09.09.2019 11:31:01 AM", "09.09.2019 11:31:01 AM"};
Les deux premières entrées sont espacées de 3 secondes, mais les nombres sont espacés de 0,000030
Les première et troisième entrées sont séparées de 1 seconde mais les nombres sont séparés de 0,000012.
Quelles sont les unités de la colonne "Valeurs JMP en secondes" ?
Re : Convertir la date OLE (en secondes) en JJ.MM.AAAA HH:MM:SS (script)je Je ne sais pas si cela aidera du tout, mais voici une façon brutale de faire la conversion.Notez que le réglage initial de la valeur de date JMP est dans la structure numérique américaine
Names Default To Here( 1 );
JMPValue = 43717.479872;
// Add the number of seconds different from the JMPValue to the
// JMP date time value for 09.09.2019 11:31:01
JMPDateTime = JMPValue + 3650829743.52013;
// Display it's value using a standard JMP format
Show( Format( JMPDateTime, "d/m/y h:m:s" ) );
// Now show the same JMPDateTime but using a Custom
// format to change the value into exactly the desired
// structure
Show(
Format(
JMPDateTime,
"Custom",
Formula(
Trim( Substr( " 0", -1 * Length( Char( Day( value ) ) ), 1) ) || Char( Day( value ) )
|| "." ||
Trim( Substr( " 0", -1 * Length( Char( Month( value ) ) ), 1) ) || Char( Month( value ) )
|| "." ||
Char( Year( value ) )
|| " " ||
Trim( Substr( " 0", -1 * Length( Char( Hour( value ) ) ), 1) ) || Char( Hour( value ) )
|| ":" ||
Trim( Substr( " 0", -1 * Length( Char( Minute( value ) ) ), 1) ) || Char( Minute( value ) )
|| ":" ||
Trim( Substr( " 0", -1 * Length( Char( Floor( Second( value ) ) ) ), 1) ) || Char( Floor( Second( value ) ) )
),
40
)
);
Ce qui donne les résultats
Format(JMPDateTime, "d/m/y h:m:s") = "09/09/2019 11:31:01 AM";
Format(JMPDateTime, "Custom", Formula(Trim(Substr(" 0", -1 * Length(Char(Day(value))), 1)) || Char(Day(value)) || "." || Trim(Substr(" 0", -1 * Length(Char(Month(value))), 1)) || Char(Month(value)) || "." || Char(Year(value)) || " " || Trim(Substr(" 0", -1 * Length(Char(Hour(value))), 1)) || Char(Hour(value)) || ":" || Trim(Substr(" 0", -1 * Length(Char(Minute(value))), 1)) || Char(Minute(value)) || ":" || Trim(Substr(" 0", -1 * Length(Char(Floor(Second(value)))), 1)) || Char(Floor(Second(value)))), 40) = "09.09.2019 11:31:01";