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?

string= 20190126195631

La date est simple:

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

Pour obtenir le temps que j'ai essayé:

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

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

4
Stephen Sharpe 26 janv. 2019 à 23:18

3 réponses

Meilleure réponse

(Trop long pour les commentaires ...)

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

Ne soustrayez pas simplement 8 de l'heure car cela renverra des valeurs non valides telles que "-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 bogues / pièges potentiels ... avec toutes les approches suggérées, en fonction de 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 quelques minutes. Exemple exécutable)

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

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

Syntaxe ColdFusion 10/11 (Remarque, utilise "mm" pendant les minutes. Exemple exécutable)

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

writeOutput("utcDate ="& utcDate &" localDate = "& localDate);
4
Ageax 28 janv. 2019 à 18:07

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

2019-01-26 19:56:31

Donc, en utilisant Coldfusion:


<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>

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

2
Charles Robertson 26 janv. 2019 à 23:00

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

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
Ageax 27 janv. 2019 à 00:10