2010-12-10 3 views
4

Das Twitter-API spuckt stammt (created_at) von api.twitter.com mit JSON-Format in folgendem Format:Gibt es eine Funktion zum Konvertieren eines Twitter-API created_at date in das richtige Format für ColdFusion 8+?

"Fri 10. Dezember 17.12.00 +0000 2010" (< - das Jahr bemerken ist, am Ende)

ColdFusion 9 scheint dieses Format nicht zu mögen und gibt einen Fehler aus.

Ich habe verschiedene eingebaute ColdFusion-Datumsfunktionen vergeblich versucht. Und auf cflib.org konnte ich nichts Nützliches finden. Hat also jemand schon eine Funktion dafür?

Antwort

2

Sie leicht die Zeichenfolge als durch Leerzeichen getrennte Liste behandeln könnte und eine freundlichere String zusammensetzen. Da Arrays schneller als Listen sind, werde ich es so schnell wie möglich in ein Array bringen und dann davon arbeiten.

public string function getSaneTwitterDate(strDateIn) output="false"{ 
    var arrOrigDate = listToArray(strDateIn, ' '); 
    var strNewDate = arrOrigDate[2] & ' ' & arrOrigDate[3] & ' ' & arrOrigDate[6]; 
    return dateFormat(strNewDate, 'yyyy-mm-dd'); 
} 

Dies ist für die Zeit berücksichtigt nicht versetzt oder Zeitinformationen enthalten, aber es wäre leicht hinzuzufügen.

+0

so einfach, wenn Sie es so sagen: D Ich habe es etwas modifiziert, indem ich "& '' und arrOrigDate [4]" an das Ende des Rückgabewerts angehängt habe, damit es auch die Zeit enthält ... Danke, Adam! –

+0

es aktualisiert Twitter stammt aus dem Search API 'public string Funktion getSaneTwitterDate (strDateIn) output = "false"{ \t var arrOrigDate = listToArray (arguments.strDateIn, '‚) richtig zu analysieren; \t var strNewDate = arrOrigDate [2] & '' & arrOrigDate [3] & ' '; \t // von api.twitter.com \t if (IsNumeric (arrOrigDate [3])) { \t \t strNewDate & arrOrigDate = [ 6]; \t \t DatumFormat (StrNewDate, "JJJJ-MM-TT") & "" & ArrOrigDate [4]; \t // von search.twitter.com \t} sonst { \t \t strNewDate & = arrOrigDate [4]; \t \t Rückkehr DateFormat (StrNewDate, "JJJJ-MM-TT") & "" & ArrOrigDate [5]; } \t} ' –

2

versuchen http://pastebin.com/GuXu8Dy1

<cfscript> 
function twitterDate(date,offset) { 
    var retDate = listtoarray(date, " "); 
    var thisDay = retDate[1]; 
    var thisMonth = retDate[2]; 
    var thisDate = retDate[3]; 
    var thisTime = timeformat(retDate[4], "h:mm tt"); 
    var thisYear = retDate[6]; 
    var thisReturn = ""; 
    var thisFormat = "#thisMonth#, #thisDate# #thisYear#"; 

    thisFormat = dateformat(thisFormat, "m/d/yy") & " " & thisTime; 
    thisFormat = dateadd("s", offset, thisFormat); 
    thisFormat = dateadd("h", 1, thisFormat); 

    longFormat = dateformat(thisFormat, "yyyy-mm-dd") & " " & timeformat(thisFormat, "HH:mm:ss"); 

    thisReturn = longFormat; 
    return thisReturn; 
} 
</cfscript> 
+2

Ernst? Sie könnten nicht daran interessiert sein, den Code in Ihre Antwort zu kopieren und einzufügen? –

+0

war es schon in pastebin, da ich ihm auf Twitter geantwortet habe. Entschuldigung für den Versuch, anderen zu helfen, die vielleicht in der Zukunft suchen und hierher kommen. –

+0

Der Punkt ist, Linkrot passiert. Wenn sich diese Verbindung aus irgendeinem Grund ändert oder verschwindet, hat diese Antwort absolut * keinen * Wert. Es ist besser, die Informationen am Zielort zu kopieren (oder zu extrahieren) und sie mit einem Link zu versehen. – ale

2
<cffunction name="parseTwitterDateFormat" output="false" returntype="String" hint="I return a date in a useable date format."> 
    <cfargument name="twitterDate" required="true" type="string" hint="The Twitter date." /> 

    <cfset var formatter = CreateObject("java", "java.text.SimpleDateFormat").init("EEE MMM d kk:mm:ss Z yyyy") /> 
    <cfset formatter.setLenient(true) /> 

    <cfreturn formatter.parse(arguments.twitterDate) /> 
</cffunction> 

Kredit geht an Matt Gifford monkeyTweet Bibliothek https://github.com/coldfumonkeh/monkehTweets

+0

Was ist cool über' setLenient (true) 'ist, dass der Formatierer ungültige Daten wie" 30. Februar 2010 "automatisch zu einem gültigen einstellt, dh" 2. März 2010 ". Wenn Sie strikteres Parsing wünschen, setzen Sie es einfach auf 'false'. – Leigh

Verwandte Themen