2

私はColdFusion10を使用していくつかのREST呼び出しを行っており、返される日付はGMTオフセットを使用しています。

例:2013-03-25T14:30:40-04:00

私はこれを2つの目的のためにフォーマットする必要があります:

  1. 画面表示なので、次のようになりますmm/dd/yyyy hh:mm:ss
  2. mySQLに挿入します。

さまざまなCF時刻/日付関数を試しましたが、「有効な日付形式ではありません」を引き続き取得します。

#ParseDateTime(i.submitted_at,"pop")#多分POPで処理できると思いましたが、同じ問題です。

数時間を費やして、複数のバリエーションを試し、今は円を描くようにグーグルで回っています。任意のアイデアをいただければ幸いです。

ありがとう!

4

5 に答える 5

4

DateConvertISO8601()CFLibのUDFをご覧ください。

CFLibのDateConvertISO8601(ISO8601dateString、targetZoneOffset)

説明:
この関数は、ISO 8601の日付を保持する文字列を受け取り、それをODBC日時に変換しますが、任意の日付に変換するように適合させることができます。また、オフセットを指定することにより、選択したタイムゾーンの日時に変換されます。つまり、GMTで日時を取り、PTに変換できます。日付と時刻の表現に関する国際規格であるISO8601の説明については、http://www.w3.org/TR/NOTE-datetimeを参照してください。

戻り値:
日時を返します。

ソースコードは私が提供したリンクで見ることができます。

于 2013-03-27T12:48:09.197 に答える
3

これ、2013-03-25T14:30:40-04:00は文字列です。これを実行する場合:

x = left(2013-03-25T14:30:40-04:00, 19);

2013-03-25T14:30:40を取得します。置換機能を使用して、Tをスペースに置き換えることができます。その後、これにできます

DateTimeVar =parsedatetime('2013-03-25 14:30:40');

これで、フォーマットできる日時変数ができました。必要に応じて、GMTからのオフセットを使用してdatediffを実行できます。

于 2013-03-27T12:42:07.077 に答える
3

これは情報提供の回答であり、質問に対する直接の回答ではありません。

ColdFusion 11は、ParseDateTime()関数を更新して、ISO-8601の日付/時刻文字列をColdFusionの日時オブジェクトに正しく変換するようにしました。

于 2014-07-14T17:13:07.477 に答える
2

多くのリモート要求と応答があるため、日付/時刻の値はISO形式で返されることがよくあります。あなたの場合、マスクは次のようになります。

YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)

このISO形式では、T文字列は、タイムスタンプが文字列で始まるマーカーのリテラル表現です(オフセットが直接続きます)。

以下は、ISO日付形式を使用可能なColdFusion日時オブジェクトに変換する再利用可能な関数です。

<cffunction name="ISOToDateTime" access="public" returntype="string" output="false" 
    hint="Converts an ISO 8601 date/time stamp with optional dashes to a ColdFusion   
        date/time stamp.">
    <cfargument name="Date" type="string" required="true" hint="ISO 8601 date/time stamp." />
        <cfreturn ARGUMENTS.Date.ReplaceFirst(
            "^.*?(\d{4})-?(\d{2})-?(\d{2})T([\d:]+).*$",
            "$1-$2-$3 $4"
            ) />
</cffunction>

次に、このような関数を呼び出して、ColdFusion対応バージョンの日時を出力または返すことができます。

ISOToDateTime( "2013-03-25T14:30:40-04:00" )

その機能はBenNadelの好意によるものです。元のブログ投稿はここにあります:

http://www.bennadel.com/blog/811-Converting-ISO-Date-Time-To-ColdFusion-Date-Time.htm

必要に応じて、オフセットを使用して日時の値を変換することもできます。繰り返しになりますが、Ben Nadelには、これを実現する方法を概説したすばらしいブログ投稿があります。

http://www.bennadel.com/blog/1595-Converting-To-GMT-And-From-GMT-In-ColdFusion-For-Use-With-HTTP-Time-Stamps.htm

于 2013-03-27T12:52:29.293 に答える
1

CF10は、 parseDateTime()ドキュメントの例で説明されているように、このコードを使用できます。

<cfset string = "1997-07-16T19:20:30+01:00">
<cfset date = parseDateTime(string, "yyyy-MM-dd'T'HH:mm:ssX")>
于 2016-03-23T16:26:24.453 に答える