2010-12-10 13 views
4

TwitterのAPIは、次の形式でJSON形式でapi.twitter.comからの日付(のcreated_at)をバック吐く:Twitter API created_atの日付をColdFusion 8+の正しい形式に変換する機能はありますか?

「金12月10日夜05時12分00秒0000 2010」(<を - 年気づくです最後に

ColdFusion 9ではこの形式が嫌いでエラーが発生します。

ColdFusionのさまざまな組み込み関数を試しましたが、無駄です。そして、私はcflib.orgで何か役に立つものを見つけることができませんでした。だから誰もこれのための機能を既に持っていますか?

答えて

2

を試してみてください。配列はリストより速いので、できるだけ早く配列に入れてから作業します。

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'); 
} 

これは、時間オフセットまたは時間情報を考慮していませんが、追加するのは簡単です。

+0

そのようにするとシンプルになります:D "& ''&arrOrigDate [4]"を戻り値の末尾に追加することで少し修正しました。 –

+0

Twitterの日付を検索APIから正しく解析するように更新しました 'public string function getSaneTwitterDate(strDateIn)output =" false "{ \t var arrOrigDate = listToArray(arguments.strDateIn、 ''); \t VAR strNewDate = arrOrigDate [2]& '' &arrOrigDate [3] & ' '; \t //からapi.twitter.com \t IF(IsNumeric関数(arrOrigDate [3])){ \t \t strNewDate&= arrOrigDate [ 6]。 \t \t戻り値dateFormat(strNewDate、 'yyyy-mm-dd')& ''&arrOrigDate [4]; \t // search.twitter.comから \t} else { \t \t strNewDate&= arrOrigDate [4]; \t \t戻り値dateFormat(strNewDate、 'yyyy-mm-dd')& ''&arrOrigDate [5]; \t} \t} ' –

2

は、あなたが簡単にスペース区切りのリストとしてその文字列を扱い、より親しみやすい文字列を構成することができ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

に行きますか?コードをコピーしてあなたの答えに貼り付けるのに気にすることはできませんでしたか? –

+0

私はtwitterで彼に答えたので、それはすでにpastebinに入っていました。将来捜している人を助けようとして、ここに来ることを謝罪します。 –

+0

ポイントは、linkrotが発生します。なんらかの理由でそのリンクが変化したり消えたりすると、この答えは絶対に* no *値になります。目的地の情報をコピー(または抜粋)し、リンク先で入手する方がよい。 – 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> 

クレジットは、マット・ギフォードのmonkeyTweetライブラリ真剣https://github.com/coldfumonkeh/monkehTweets

+0

'setLenient(true)は、フォーマッタが" Feb 30 2010 "のような無効な日付を有効なもの、すなわち" Mar 2 2010 "に自動的に調整するものです。もっと厳密な構文解析が必要な場合は、 'false'に設定してください。 – Leigh

関連する問題