dateTimes를 문자열로 형식화 및 구문 분석

이 절에서는 패턴 문자의 문자열을 사용하여 dateTime 형식을 지정할 수 있는 방법에 대한 정보를 설명합니다.

날짜 또는 시간을 문자열로 변환할 때, 변환을 지시하는 형식 패턴이 적용되어야 합니다. 날짜 또는 시간을 문자열로 변환하거나 문자열을 날짜 또는 시간으로 구문 분석하려면 형식 패턴을 적용하십시오.

변환(예를 들어 dateTime에서 문자열로의) 중에 패턴이나 토큰 세트가 동등한 소스로 바뀝니다. 다음 다이어그램은 패턴을 사용하여 dateTime 소스를 형식화하여 문자열 출력을 생성하는 방법을 보여줍니다.

이 다이어그램은 날짜 시간 소스 및 형식 패턴의 결과인 출력 문자열을 표시합니다.

문자열이 구문 분석될 때(예를 들어, 문자열을 dateTime으로 변환할 때), 패턴 또는 토큰 세트가 대상 dateTime의 어떤 부분이 문자열의 어떤 부분에 의해 표시되는지를 판별하는 데 사용됩니다. 다음 다이어그램이 이를 수행하는 방법을 보여줍니다.

이 다이어그램은 문자열 데이터 소스 및 형식 패턴의 결과인 날짜 시간 출력을 표시합니다.

구문

이 표현식 패턴은 다음에 의해 정의됩니다.

구문 다이어그램 읽기시각적 구문 다이어그램 건너뛰기symbol문자열
여기서:
symbol
adDeEFGhHIkKmMsSTUwWyYzZ 세트의 문자입니다.
문자열
작은따옴표로 묶은 일련의 문자입니다. 문자열 안에서 작은따옴표가 필요한 경우 두 개의 작은따옴표('')를 사용하십시오.

dateTime을 문자열로 형식화하는 문자

다음 표는 dateTime과 관련하여 문자열 형식화 또는 구문 분석을 위한 패턴에서 사용할 수 있는 문자를 나열합니다. 표 뒤에 표에 있는 예의 일부에 대해 자세히 설명하는 몇 가지 참고가 있습니다.

기호 의미 프리젠테이션
a 오전 또는 오후 마커 텍스트 입력 am, AM, pm, PM. 출력 AM 또는 PM
d 월의 일 수(1 - 31) 번호 1, 20
dd 월의 일 수(01 - 31) 번호 01, 31
D 년의 일(1 - 366) 번호 3, 80, 100
DD 년의 일(01 - 366) 번호 03, 80, 366
DDD 년의 일(001 - 366) 번호 003
e 주의 일 수(1 - 7)1 번호 2
EEE 요일1 텍스트 Tue
EEEE 요일1 텍스트 화요일
F 월의 주 수(1 - 5)2 번호 2
G 연대 텍스트 BC 또는 AD
h 오전 또는 오후의 시간(1 - 12) 번호 6
hh 오전 또는 오후별 시간(01 - 12) 번호 06
H 24시간 양식에서 하루 중 시간(0 - 23)3 번호 7
HH 24시간 양식의 하루 중 시간(00 - 23)3 번호 07
I ISO8601 날짜/시간(최대 yyyy-MM-dd'T'HH:mm:ss. SSSZZZ)4 텍스트 2006-10-07T12:06:56.568+01:00
IU ISO8601 날짜/시간(I와 유사하지만, 시간대가 +00:00인 경우 출력 "Z"를 갖는 ZZZ)4 텍스트 2006-10-07T12:06:56.568+01:00, 2003-12 -15T15:42:12.000Z
k 24시간 양식의 하루 중 시간(1 - 24)3 번호 8
kk 24시간 양식의 하루 중 시간(01 - 24)3 번호 08
K 오전 또는 오후별 시간(0 - 11) 번호 9
KK 오전 또는 오후별 시간(00 - 11) 번호 09
m 번호 4
mm 번호 04
M 숫자 월 번호 5, 12
MM 숫자 월 번호 05, 12
MMM 이름 지정된 월 텍스트 Jan, Feb
MMMM 이름 지정된 월 텍스트 January, February
s seconds10 번호 5
ss seconds10 번호 05
S decisecond5 번호 7
SS centisecond5 번호 70
SSS millisecond5 번호 700
SSSS 0.0001초5 번호 7000
SSSSS 0.00001초5 번호 70000
SSSSSS 0.000001초5 번호 700000
T ISO8601 시간(최대 HH:mm:ss.SSSZZZ)4 텍스트 12:06:56.568+01:00
TU ISO8601 시간(T와 유사하지만, +00:00의 시간대는 'Z'로 대체됨)4 텍스트 12:06:56.568+01:00, 15:42:12.000Z
w 년의 주 수6 번호 7, 53
ww 년의 주 수6 번호 07, 53
W 월의 주 수7 번호 2
yy year8 번호 06
yyyy year8 번호 2006
YY 년도: 연의 주와 함께만 사용6 번호 06
YYYY 년도: 연의 주와 함께만 사용6 번호 2006
zzz 시간대(약어 이름)9 텍스트 EST
zzzz 시간대(전체 이름) 텍스트 동부 표준시(EST)
Z 시간대(+/-n) 텍스트 +3
ZZ 시간대(+/-nn) 텍스트 +03
ZZZ 시간대(+/-nn:nn) 텍스트 +03:00
ZZZU 시간대(ZZZ로서, "+00:00"은 "Z"로 대체됨) 텍스트 +03:00, Z
ZZZZ 시간대(GMT+/-nn:nn) 텍스트 GMT+03:00
ZZZZZ 시간대(ZZZ, 콜론 없음)(+/-nnnn) 텍스트 +0300
' 텍스트 이스케이프   'User text'
" (두 개의 작은따옴표) 이스케이프된 텍스트 내의 작은따옴표   'o"clock'

dateTime 오브젝트의 프리젠테이션은 사용자가 지정하는 기호에 따라 다릅니다.

  • 텍스트. 4개 이상의 기호를 지정하면, 전체 형식이 표시됩니다. 4개 미만의 기호를 지정하면 짧은 양식(있는 경우)이 표시됩니다. 예제:EEEE생성Monday,EEE생성Mon.
  • 숫자. 숫자 dateTime 구성요소의 문자 수는 대응하는 형식화 기호의 경계 내에 있어야 합니다. 필요한 최소 자릿수를 지정하려면 기호를 반복하십시오. 허용되는 최대 자릿수는 특정 기호에 대한 상한입니다. 예제:day in month은 31의 상한을 가지며, 따라서 다음과 같은 형식 문자열을 가지고 있다.d는 값들 2또는 21이 파싱되도록 하지만 값들 (32및 210) 은 허용하지 않는다. 출력 시 숫자는 지정된 길이까지 0으로 채워집니다. 연도는 특별한 경우입니다. 다음 목록의 참고 8을 참조하십시오. 분수 초도 특별한 경우입니다. 다음 목록의 참고 5를 참조하십시오.
  • (['a' .. 'z']) 및 ['A'..'Z'] 범위에 없는 패턴의 모든 문자는 인용된 텍스트로 취급됩니다. 예를 들어, 콜론(:), 쉼표(,), 마침표(.), 숫자 사인(해시 또는 파운드 #), at 기호(@) 및 공백은 작은따옴표로 묶지 않은 경우에도 결과 시간 텍스트에 나타납니다.
  • 예측할 수 없는 결과를 생성하는 형식화 문자열을 작성할 수 있으므로, 이들 기호는 주의해서 사용해야 합니다. 예를 들어, 다음을 지정하는 경우dMyyyy일, 월, 연도를 구별할 수 없습니다.dMyyyy는 통합 노드에 최소 한 개의 문자가 하루를 나타내고, 최소 하나의 문자가 월을 나타내고 네 개의 문자가 연도를 나타냅니다. 따라서,3111999는 3/11/11/1999또는 31/1/1999로 해석될 수 있다.
참고: 다음 주의사항은 위의 테이블에 적용됩니다.
  1. 다음 값을 지정할 수 있습니다.day in week필드:
    • 1 - 일요일
    • 2 - 월요일
    • 3 - 화요일
    • 4 - 수요일
    • 5 - 목요일
    • 6 - 금요일
    • 7 - 토요일
  2. 12th 7월은 7월두 번째 수요일이며 다음과 같이 표현할 수 있습니다.2006 July Wednesday 2형식 스트링을 사용하여yyyy MMMM EEEE F. 이 형식은 2006년 7월 2일 (2006년 7월 2일), 2006년 7월 5th 2006년 7월) 은 표시되지 않습니다. 이 형식의 형식 문자열은 다음과 같습니다.yyyy MMMM EEEE W.
  3. 충돌하는 오전/오후 필드를 갖고 지정되면 24시간 필드가 애매모호한 시간이 될 수 있습니다.
  4. ISO8601, I및 T DateTime 토큰을 참조하십시오.
  5. 분수 초는 대문자 S로 표현됩니다. 길이는 암시적으로 입력 시 형식 기호의 수와 일치해야 합니다. 형식 스트링ss SSS또는ss.SSS예를 들어, 초 및 밀리초를 나타냅니다. 그러나 형식 스트링ss.sss반복 필드 (초) 를 나타내며, 마침표 (.) 이후의 값은 분수 초가 아니라 초 필드로 간주됩니다. 출력은 지정된 길이로 잘립니다.
  6. ESQL에서 연도의 첫 날은 첫 번째 주에 있는 것으로 가정되므로, 1월 1일은 항상 1주에 있습니다. 결과적으로, 한 연도에 상대적으로 지정되는 날짜가 다른 연도에 있을 수 있습니다. 예를 들어, "월요일 주 1 2005" 구문 분석은 다음을 사용하여 구문 분석합니다.EEEE' week 'w' 'YYYY" 2005년 첫 주의 월요일이 2004년의 날짜이기 때문에 2004-12-27의 날짜를 제공합니다.

    를 사용하는 경우y기호, 조정이 완료되지 않았으며 연말 경에 날짜에 대해 예측할 수 없는 결과가 발생할 수 있습니다. 예를 들어, 문자열 "2005 01 Monday"는 다음과 같이 형식화됩니다.

    • 형식 문자열을 사용하여 2005년 1월 1 일YYYY ww EEEE" 2004년 12월 27th (으) 로 올바르게 해석됩니다.
    • 형식 문자열을 사용하여 2005년 1월 1 일yyyy ww EEEE" 27th 12월로 잘못 해석되었습니다.
  7. 월의 첫 번째와 마지막 주는 인접 월의 날짜를 포함할 수 있습니다. 예를 들어, 월요일 31st July 2006은 2006년 8월 1일 월요일로 표현될 수 있으며,2006 08 1 Monday형식 문자열 사용yyyy MM W EEEE.
  8. 연도는 특별한 경우로 취급됩니다.
    • 출력 시, 다음의 계수y[=]2, 연도는 2자리로 절단됩니다. 예를 들어, 다음과 같은 경우yyyy생성1997,yy생성97.
    • 출력 시, 2자리 숫자 연도의 경우 century window가 53으로 고정됩니다. 예를 들어, 52의 입력 날짜는 2052의 연도 값이 되는 반면, 53의 입력 날짜는 1953의 출력 연도를 제공하고 97은 1997을 제공합니다.
  9. 사용하기zzz옵션은 모호한 결과를 가질 수 있습니다. 예제:BST는 으로 해석될 수 있다.Bangladesh Standard Time또는British Summer Time호환성을 위해 IBM® Integration Bus 는 이전 해석을 사용합니다.

    이러한 문제점을 방지하려면 다음을 사용하십시오.zzzz옵션이 잘 정의된 옵션 (예: Europe/London, Asia/Dhaka 또는 America/Los_Angeles)

  10. s &ss0-59범위에 있어야 합니다. 작성되거나 캐스트되는 값이 초에 대해 값 60을 사용하는 리프 초 중에 시간을 표시하는 TIMESTAMP를 구성해야 하는 경우, ESQL 코드 내에서 이 사례를 핸들링해야 합니다. 제품의 CURRENT_ datetime 함수(예: CURRENT_TIME)는 초 값이 0 - 59 범위를 벗어난 시간을 절대 생성하지 않습니다.

ISO8601, I 및 T DateTime 토큰

dateTime 값이 ISO8601:2000 '날짜 및 시간의 표현' 표준을 준수하는 경우, ISO8601 표준의 다음 서브세트와 일치하는 형식화 기호 I 및 T 사용을 고려하십시오.

  • http://www.w3.org/TR/NOTE-datetime 에 있는 W3C 에서 제안한 대로 제한된 프로파일
  • ISO8601:2000의 섹션 5.2.1.3에서 지정되는 달력 날짜의 잘린 표현
    • 기본 형식(서브섹션 c, e 및 f)
    • 확장 형식(서브섹션 a, b 및 d)

다음 자체 형식에서만 형식화 기호 I 및 T를 사용하십시오.

  • I 형식화 기호는 지원되는 서브세트를 준수하는 모든 dateTime 문자열과 일치합니다.
  • T 형식화 기호는 시간 부분으로만 구성되는 지원되는 서브세트를 준수하는 모든 dateTime 문자열과 일치합니다.

다음 표는 출력 양식이 논리 데이터 유형과 관련되는 방법을 보여줍니다.

논리 모델 데이터 유형 ESQL 데이터 유형(ESQL data type) 출력 양식
xsd:dateTime TIMESTAMP 또는 GMTTIMESTAMP yyyy-MM-dd'T'HH:mm:ss.SSSZZZ
xsd:date DATE yyyy-MM-dd
xsd:gYear INTERVAL yyyy
xsd:gYearMonth INTERVAL yyyy-MM
xsd:gMonth INTERVAL --MM
xsd:gmonthDay INTERVAL --MM-dd
xsd:gDay INTERVAL ---dd
xsd:time TIME / GMTTIME 'T'HH:mm:ss.SSSZZZ
참고:
  • 입력 시에 I와 T는 둘 다 협정 세계시(UTC)와의 0 시간대 차이를 표시하기 위해 '+00:00'과 'Z'를 둘 다 허용하지만, 출력 시에는 항상 '+00:00'을 생성합니다. 'Z'가 항상 출력 시에 생성되길 원하는 경우 IU 또는 TU 형식화 기호를 대신 사용하십시오.
  • ZZZ는 항상 '+00:00'을 작성하여 협정 세계시(UTC)와의 0 시간대 차이를 표시합니다. 'Z'가 항상 출력 시에 생성되길 원하는 경우 ZZZU를 대신 사용하십시오.

출력 시 입력 UTC 형식 사용

dateTime을 문자열로 포함하는 논리 유형 xsd:dateTime 또는 xsd:time의 요소나 속성은 Z 기호나 시간대 +00:00을 사용하여 협정 세계시(UTC)를 지정할 수 있습니다. 입력 시 MRM 구문 분석기는 그런 요소 및 속성의 UTC 형식을 기억합니다. 출력 시, 요소 또는 속성의 기본 DateTime 형식 특성을 사용하여 Z 또는 +00:00이 표시되는지 여부를 지정할 수 있습니다. 또는 메시지 세트 특성 입력 시 입력 UTC 형식 사용을 선택하여 입력 UTC 형식을 보존할 수 있습니다. 이 특성이 선택되면 UTC 형식이 출력 메시지에서 보존되고 dateTime 형식 특성에 의해 암시되는 형식을 대체합니다.

일광 절약 시간 및 CAST 함수 이해

통합 노드가 GMT가 아닌 시간대에서 실행 중일 때는 CAST 함수에 의해 제공되는 시간대에서 일광 절약 시간(DST) 오프셋을 계산합니다. CAST가 오프셋을 올바르게 계산하기 위해서는 CAST로 전달되는 시간은 그와 연관된 시간대를 Z 매개변수로서 갖고 있어야 합니다. 전달되는 값과 연관된 시간대가 없는 경우 시간이 GMT 시간으로 변환되며 로컬 시간소인으로 취급되지 않습니다.

또한 CAST를 사용하여 문자열을 시간 값으로 캐스트할 때 DST 오프셋은 현재 시스템 날짜를 사용하여 계산됩니다. 문자열을 시간 변수로 캐스트하고 특정 날짜에 대한 DST를 계산하려면 날짜도 지정해야 합니다.

예를 들어 timeValue='10:00:00'인 경우, 시간대 ID가 지정되지 않기 때문에 하절기 중부 표준시(CDT) 시간대에 있는 통합 노드에서 실행되는 다음 코드는 시간을 GMT로 변환합니다.
DECLARE castTime TIME;
SET castTime = CAST (timeValue AS TIME FORMAT timePattern)
castTime 변수가 후속 코드에서 사용되는 경우 시간은 다시 GMT로 변환되지 않습니다. 예:
CAST(castDate, castTime AS GMTTIMESTAMP);

다음 표는 몇 가지 dateTime 형식의 예를 보여줍니다.

형식 패턴 결과
"yyyy.MM.dd 'at' HH:mm:ss ZZZ" 2006.07.10 at 15:08:56 -05:00
"EEE, MMM d, "yy" Wed, July 10, '06
"h:mm a" 8:08 PM
"hh o"clock a, ZZZZ" 09 o'clock AM, GMT+09:00
"K:mm a, ZZZ" 9:34 AM, -05:00
"yyyy.MMMMM.dd hh:mm aaa" 1996.July.10 12:08 PM

MRM 도메인 내에 사용하십시오

MRM에서는 dateTime의 논리 유형을 갖는 요소를 정의할 수 있습니다.

dateTime 요소가 구문 분석될 때 CURRENT_TIME 또는 CURRENT_TIMESTAMP의 ESQL 데이터 유형을 갖는 메시지 트리에 필드가 작성됩니다. 그러나 CURRENT_TIME 및 CURRENT_TIMESTAMP 데이터 유형은 시간대 정보를 저장하는 기능이 없으며, MRM은 입력 시간대 및 통합 노드의 시간대에 따라서 시간을 조정하지 않습니다.

CURRENT_TIME 및 CURRENT_TIMESTAMP 데이터 유형은 시간대 정보를 저장할 수 없지만, MRM은 이 정보를 기본 필드의 일부로 저장합니다. 이것은 필드가 메시지 트리 사이에 복사되는 경우 시간대 정보가 함께 복사되어 이 정보가 출력에 유지될 수 있음을 의미합니다.

이 정보는 필드가 동일한 이름의 필드로 복사되는 경우에만 보존됨을 참고하십시오.

그러나 임의의 새 필드가 원래 필드로부터 파생되는 경우 새 필드는 시간대 정보를 갖지 않습니다. 이것은 그런 필드가 문자로서 캐스트되는 경우 새 필드는 통합 노드의 시간대를 가정하지만 그의 값이 입력 시간대와 통합 노드의 시간대 사이의 차이에 대해 조정되지 않음을 의미합니다.

예를 들어, 입력 날짜 시간 요소를 포함하는2009-02-20T06:08:07-08:00입력 메시지 트리에서 출력 메시지 트리로 복사되어 출력 메시지에 정확히 동일한 형식으로 표시될 수 있습니다. 그러나 요소가 문자로 캐스트되는 경우 형식을 사용합니다.IU, 통합 노드가 GMT를 실행하면 결과는 다음과 같습니다.2009-02-20T06:08:07.000Z.