4
votes

Conversion de chaîne de temps .Net dans Coldfusion

J'ai une chaîne de temps à six chiffres provenant de .NET que je voudrais convertir en horodatage dans ColdFusion. Quelle serait la bonne façon de convertir cela?

timestamp = timeFormat(parseDateTime(mid(string,9,6)),'HH:mm')

La date est simple:

thisDate = '#mid(string,5,2)#/#mid(string,7,2)#/#mid(string,1,4)#'

Pour obtenir l'heure que j'ai essayé:

string= 20190126195631

Que dois-je faire avec le 195631 pour afficher l'horodatage?


2 commentaires

De nombreuses personnes utilisent la méthode JAVA formatter.parse () petefreitag.com/ item / 569.cfm


J'ai écrit des UDF pour convertir dans les deux sens. Utilisez DateUnhash pour convertir la chaîne en une valeur de date / heure. gist.github.com/JamoCA/8961085


3 Réponses :


2
votes

Merci! Vos commentaires m'ont aidé à réaliser que l'heure est simplement: HHMMSS 19 = 19 heures, 56 minutes et 31 secondes.

Ce qui m'a dérangé, c'est le décalage GMT (-8 heures pour moi). La réponse est donc:

time = '#mid(string,9,2)-8#:#mid(string,11,2)#'


2 commentaires

Ce qui précède échouera dans certaines conditions. Voir plus de détails


Modifier - mauvais lien. Doit être stackoverflow.com/a/54384804/8895292



2
votes

Je vais peut-être devenir fou ici, mais il semble que la chaîne pourrait être divisée comme ceci:

<cfset datetimestring = "20190126195631">

<cfset year = Mid(datetimestring,1,4)>
<cfset month = Val(Mid(datetimestring,5,2))>
<cfset day = Val(Mid(datetimestring,7,2))>
<cfset hour = Val(Mid(datetimestring,9,2))>
<cfset minute = Val(Mid(datetimestring,11,2))>
<cfset second = Val(Mid(datetimestring,13,2))>


<cfset dateTime = CreateDateTime(year,month,day,hour,minute,second)>

<cfset dateTimeOffset = DateAdd("h", -8, dateTime)>

<cfoutput>
#dateTimeOffset#
</cfoutput>

Donc, en utilisant Coldfusion:

2019-01-26 19:56:31

Comme je l'ai dit, cette chaîne pourrait simplement être un horodatage d'époque, mais cela ressemble à un modèle 'date / heure'?


0 commentaires

4
votes

(Trop long pour les commentaires ...)

time = '#mid (chaîne, 9,2) -8 #

Ne soustrayez pas simplement 8 de l'heure car cela renverra une valeur invalide comme "-1" AM ou "-8" AM, lorsque la valeur UTC est comprise entre minuit et 7h00.

De plus, si vous convertissez la valeur en heure locale, n'oubliez pas les changements d'heure d'été. Un décalage de 8 heures peut passer à 7 heures, selon la période de l'année et la zone. Au lieu d'utiliser un numéro codé en dur, jetez un œil au DateConvert pour convertir l'UTC en heure locale et en utilisant ParseDateTime avec un masque, au lieu de plusieurs fonctions de chaîne.

Gardez à l'esprit qu'il y a des avantages, des inconvénients .. et malheureusement des bugs / pièges potentiels .. avec tous les les approches suggérées, selon votre version de CF. Assurez-vous donc de tester avec une variété de valeurs de date et de fuseaux horaires.

Syntaxe ColdFusion 2016+ (Remarque, utilise "nn" pendant les minutes. Exemple exécutable )

str = "20190126175631";
utcDate = parseDateTime(str, "yyyyMMddHHmmss");
localDate = DateConvert("utc2Local", utcDate);

writeOutput("utcDate ="& utcDate &" localDate = "& localDate);

ColdFusion 10 / 11 syntaxe (Remarque, utilise "mm" pour les minutes. Exemple exécutable a>)

str = "20190126175631";
utcDate = parseDateTime(str, "yyyyMMddHHnnss");
localDate = DateConvert("utc2Local", utcDate);

writeOutput("utcDate ="& utcDate &" localDate = "& localDate);


4 commentaires

Oui, j'ai eu une erreur -8 vers 16 heures. PST car 0-8 n'était pas une heure valide. Le dateConvert est la bonne solution. Merci!


On dirait que la conversion pop utilise mm pour les minutes plutôt que nn Message: aaaaMMjjHHnnss n'est pas un format de date valide. aaaaMMjjHHmmss docs.oracle.com/javase/7/docs / api / java / text /…


Mise à jour avec l'exemple @StephenSharpe - Ouais, nn fonctionne dans CF2016 +, tandis que CF10 / 11 utilise mm (c'est ce que j'impliquais par gotchas / selon version). Utilisez-vous CF10 / 11? Si tel est le cas, vous voudrez peut-être mettre à jour les balises de question. J'ai (à tort) supposé que vous utilisiez 2016+


@CharlesRobertson - Plus simple, mais ... depuis qu'Adobe a cassé la compatibilité descendante: - / ... en y réfléchissant, les fonctions String (ou Java) sont plus résistantes pour l'aspect d'analyse lors de la mise à niveau. Je garderais DateConvert pour la traduction en heure locale.