2013-03-27 4 views
2

ColdFusion 10을 사용하여 일부 REST 호출을하고 있으며 반환 된 날짜가 GMT 오프셋을 사용하고 있습니다.ColdFusion - GMT 오프셋이있는 DateTime 형식

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

나는이 두 목적으로 포맷해야합니다

  1. 화면 디스플레이가 MySQL을 삽입 할 mm/dd/yyyy hh:mm:ss
  2. 같이 보입니다 있도록.

는 내가 CF의 시간/날짜 다양한 기능을 시도하지만, 나는 어쩌면 #ParseDateTime(i.submitted_at,"pop")#이 POP하지만 같은 문제로 처리 할 것이라고 생각

"유효한 날짜 형식 아니다"가 계속했다.

이제 여러 가지 변형을 시도하고 주변을 둘러 보며 몇 시간을 소비했습니다. 어떤 아이디어라도 대단히 감사하겠습니다.

감사합니다.

답변

4

CFLib의 UDF DateConvertISO8601()을 살펴보십시오.

DateConvertISO8601(ISO8601dateString, targetZoneOffset) on CFLib

설명 :
이 기능은 ISO 8601의 날짜를 보유하고 ODBC의 날짜로 변환,하지만 당신이 원하는대로로 변환하기에 적합 할 수있는 문자열을. 또한 오프셋을 지정하여 원하는 시간대의 datetime으로 변환합니다. 즉, GMT로 datetime을 사용하고 PT로 변환 할 수 있습니다. 날짜와 시간을 나타내는 국제 표준 인 ISO 8601에 대한 설명은 http://www.w3.org/TR/NOTE-datetime을 참조하십시오.

반환 값 :
datetime을 반환합니다.

소스 코드는 내가 제공 한 링크에서 볼 수 있습니다.

3

2013-03-25T14 : 30 : 40-04 : 00은 문자열입니다. 실행할 경우 :

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

2013-03-25T14 : 30 : 40이 표시됩니다. replace 함수를 사용하여 T를 공백으로 대체 할 수 있습니다. 그러면 다음과 같이 할 수 있습니다.

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

이제 형식을 지정할 수있는 datetime 변수가 있습니다. 필요한 경우 GMT로부터의 오프셋을 사용하여 datediff를 수행 할 수 있습니다.

2

원격 요청 및 응답 수가 많으면 날짜/시간 값을 ISO 형식으로 반환 할 수 있습니다. 귀하의 경우에는, 마스크는 다음과 같습니다 :이 ISO 형식으로

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

에서, T 문자열은 마커의 문자 적 ​​표현이다 (오프셋 바로 다음에) 문자열의 타임 스탬프가 시작됩니다.

<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에서 용 버전을 반환 할 수 있습니다 : 아래

이 가능한 ColdFusion에서 날짜 시간 개체로는 ISO 날짜 형식을 변환하는 재사용 가능한 기능입니다 날짜 시간 :

그 기능은 Ben Nadel의 호의입니다. 원래 블로그 게시물은 여기에서 찾을 수 있습니다 : 당신은 또한 필요한 경우는, 오프셋 사용하여 날짜 시간 값을 변환 할 수 있습니다

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

.

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

+0

내가 틀렸다면 수정하십시오. 그러나 실제로 작동하는 것처럼 보이지만 사실 더러운 데이터를 제공합니다. "2014-08-19T11 : 02 : 20.633-07 : 00"과 "2014-08-19T11 : 02 : 20.633-04 : 00"두 가지 날짜를 고려하십시오. 이 날짜는 실제로 3 시간 떨어져 있지만 위의 코드는 두 날짜를 같은 값으로 표시합니다 : "2014-08-19 11:02:20". 다음 링크 된 기사에서는 시간대 변환에 ​​대해 이야기하지만 실제로는 서버의 기본 설정 시간대 만 처리합니다. 날짜 문자열 내의 시간대 오프셋이 아닙니다. – Nicholas

2

이이 정보를 대답이 아니라 질문에 직접 대답 : 다시, 벤 나델이 작업을 수행하는 방법을 요약 좋은 블로그 게시물이 있습니다.

ColdFusion 11은 ParseDateTime() 함수를 업데이트하여 ISO-8601 날짜/시간 문자열을 ColdFusion datetime 객체로 올바르게 변환합니다.

1

CF10은 parseDateTime() doc의 예에서 설명한 것처럼이 코드를 사용할 수 있습니다.

<cfset string = "1997-07-16T19:20:30+01:00"> 
<cfset date = parseDateTime(string, "yyyy-MM-dd'T'HH:mm:ssX")>