날짜/시간 마스크 및 형식 지정자

EGL은 대문자 및 소문자의 패턴을 사용하여 DATE, TIME, TIMESTAMP 또는 INTERVAL 변수의 컴포넌트를 나타냅니다. 이들 문자는 대소문자를 구분하며 패턴의 모든 문자는 날짜 또는 시간의 컴포넌트로 구문 분석됩니다. 이 문자를 사용하기 위한 규칙은 사용자가 해당 문자를 사용하는 방법에 따라 약간 다릅니다.
  • TIMESTAMP 또는 INTERVAL 변수를 선언하는 경우 마스크를 지정하여 변수의 내부 형식을 정의할 수 있습니다. EGL은 변수의 값과 함께 마스크 정보를 전달합니다. (EGL은 항상 DATE 변수를 yyyyMMdd로 저장하고 TIME 변수를 HHmmss로 저장함)
  • 문자열을 사용하여 날짜/시간 변수에 값을 지정하는 경우에는 구문 분석 형식을 사용합니다.
  • 날짜/시간 변수의 내부 값을 표시하거나 인쇄는 경우 표시 형식을 사용합니다.

이 변수의 내부 값에 대한 자세한 정보는 "기본 데이터 유형"을 참조하십시오.

INTERVAL 마스크 작성

월 범위 형식인 마스크의 경우 다음과 같은 문자를 표시된 순서대로 사용할 수 있습니다.
y
간격에서 년 수를 나타내는 0자리 - 9자리 숫자입니다.
M
간격에서 개월 수를 나타내는 0자리 - 9자리 숫자입니다. M이 마스크에서 첫 번째 문자가 아닌 경우에는 최대 2자리의 숫자만 허용됩니다.

기본 마스크는 yyyyMM입니다.

초 범위 형식인 마스크의 경우 다음과 같은 문자를 표시된 순서대로 사용할 수 있습니다.
d
간격에서 일 수를 나타내는 0자리 - 9자리 숫자입니다.
H
간격에서 시간 수를 나타내는 0자리 - 9자리 숫자입니다. H가 마스크에서 첫 번째 문자가 아닌 경우에는 최대 2자리의 숫자만 허용됩니다.
m
간격에서 분 수를 나타내는 나타내는 0자리 - 9자리 숫자입니다. m이 마스크에서 첫 번째 문자가 아닌 경우에는 최대 2자리의 숫자만 허용됩니다.
s
간격에서 초 수를 나타내는 0자리 - 9자리 숫자입니다. s가 마스크에서 첫 번째 문자가 아닌 경우에는 최대 2자리의 숫자만 허용됩니다.
f
각각 소수 초를 나타내는 0자리 - 6자리 숫자입니다. 첫 번째 자리는 1/10초를 나타내고 두 번째 자리는 1/100초를 나타내는 방식으로 각각의 자리가 소수 초를 나타냅니다. f가 마스크에서 첫 번째 문자인 경우에도 최대 6자리의 숫자만 허용됩니다.
마스크의 시작 또는 끝 부분에는 지정된 유형의 문자가 없을 수 있지만 중간 문자는 건너뛸 수 없습니다. 다음과 같은 마스크는 유효합니다.
  yyyyyyMM
  yyyyyy
  MM

  ddHHmmssffffff
  HHmmssff
  mmss
  HHmm
하지만 중간 문자가 누락되었기 때문에 다음과 같은 마스크는 유효하지 않습니다.
  // NOT valid
  ddmmssffffff 
  HHssff

TIMESTAMP 마스크 작성

마스크를 지정할 때 다음과 같은 문자를 순서대로 사용할 수 있습니다.
yyyy
연도를 나타내는 4자리 숫자입니다. 범위는 0000 - 9999입니다.
MM
월을 나타내는 2자리 숫자입니다. 범위는 01 - 12입니다.
dd
일을 나타내는 2자리 숫자입니다. 범위는 01 - 31입니다.
HH
시를 나타내는 2자리 숫자입니다. 범위는 00 - 23입니다.
mm
분을 나타내는 2자리 숫자입니다. 범위는 00 - 59입니다.
ss
초를 나타내는 2자리 숫자입니다. 범위는 00 - 59입니다.
f
각각 소수 초를 나타내는 0자리 - 6자리 숫자입니다. 첫 번째 자리는 1/10초를 나타내고 두 번째 자리는 1/100초를 나타내는 방식으로 각각의 자리가 소수 초를 나타냅니다.

기본 마스크는 yyyyMMddHHmmss입니다.

다음과 같은 규칙도 적용됩니다(예외는 이 주제에서 "호환성" 참조).
  • 마스크의 시작 또는 끝 부분에 지정된 유형의 문자가 없을 수 있지만 중간 문자는 건너뛸 수 없습니다.
  • 다음과 같은 마스크는 유효합니다.
      yyyyMMddHHmmss
      yyyy
      MMss
  • 중간 문자가 누락되었기 때문에 다음과 같은 마스크는 유효하지 않습니다.
      // NOT valid
      ddMMssffffff
      HHssff

표시 또는 구문 분석 형식 작성

날짜/시간 변수의 값을 설정하기 위해 입력 문자열을 스캔할 때 EGL은 다음과 같은 시스템 변수 중 하나의 현재 값을 변수의 유형에 따라 사용합니다.
  • strLib.defaultDateFormat
  • strLib.defaultTimeFormat
  • strLib.defaultTimestampFormat

구문 분석 형식을 위한 규칙은 표시 형식을 위한 규칙과 비슷하지만 다음 규칙에 언급된 예외가 있습니다.

다음 시스템 함수를 사용하여 날짜/시간 변수를 출력을 위한 문자열로 변환할 수 있습니다.
  • strLib.formatDate()
  • strLib.formatTime()
  • strLib.formatTimestamp()
다음과 같은 값을 사용하여 변환을 위한 형식을 지정할 수 있습니다.
  • 사용자 자체 작성의 형식 패턴
  • EGL이 상수로 정의하는 몇몇 표준 패턴 중 하나("formatDate()" strLib 함수 참조)
  • 변환하는 변수의 유형에 따라 적절한 기본 형식(예: strLib.defaultDateFormat)

문자를 사용하여 날짜 또는 시간의 컴포넌트를 표시하여 자체 형식 패턴을 작성하십시오. 해당 텍스트를 날짜 또는 시간의 컴포넌트로 구문 분석하지 않고 날짜/시간 문자열에 문자를 포함하려면 해당 문자를 작은따옴표로 묶으십시오. 날짜, 시간 또는 시간소인에서 작은따옴표를 표시하려면 두 개의 작은따옴표를 사용하십시오.

다음 표에는 패턴의 문자 및 해당 값이 나열됩니다.

문자 날짜 또는 시간 컴포넌트 유형 예제
G 연대 지정자 텍스트 AD
y 연도 연도 1996, 96
M 년 중 월 July, Jul, 07
w 연 중 주 숫자 27
W 월 중 주 숫자 2
D 년 중 일 숫자 189
d 월 중 일 숫자 10
F 주 중 일 숫자 2
E 요일 텍스트 화요일, 화
a AM/PM 마커 텍스트 PM
H 하루 중 시간(0 - 23) 숫자 0
k 하루 중 시간(1 - 24) 숫자 24
K AM/PM 시간(0 - 11) 숫자 0
h AM/PM 시간(1 - 12) 숫자 12
m 숫자 30
s 숫자 55
S 밀리초(출력) 숫자 978
f 밀리초(구문 분석) 숫자 978
z 시간대 일반 시간대 태평양 표준시, PST, GMT-08:00
Z 시간대 RFC 822 시간대 -800
C 세기 세기 20, 21

패턴에서 연속적으로 사용되는 복수의 동일한 문자는 EGL이 문자열에서 해당 숫자, 문자 또는 둘 다를 구문 분석하는 방법을 판별합니다. 해석은 문자의 유형과 패턴이 형식화 또는 구문 분석에 사용되고 있는지 여부에 따라 다릅니다. 다음 목록에서는 문자의 유형과 해당 문자의 다양한 수량이 해석 방식에 어떤 영향을 미치는지에 대해 설명합니다.

텍스트
출력의 경우 문자 수가 4개를 초과하면 전체 양식이 사용됩니다. 그렇지 않으면 약어가 사용됩니다(사용 가능한 경우). 구문 분석 시에는 패턴 문자의 수에 관계없이 두 양식이 모두 승인됩니다.
숫자
출력의 경우 패턴 문자의 수는 최소 자릿수를 나타냅니다. 지정된 길이를 만들기 위해 짧은 숫자에 0(영)이 추가됩니다. 구문 분석의 경우 패턴 문자의 수는 인접한 두 필드를 구분하기 위해 필요한 경우가 아니면 무시됩니다.
연도
형식화의 경우 패턴 문자의 수가 2이면 연도가 2자리로 잘립니다. 그렇지 않으면 숫자 유형으로 해석됩니다.

구문 분석의 경우 패턴 문자의 수가 2가 아니면 연도는 자릿수에 관계없이 문자 그대로 해석됩니다. 예를 들어, 01/11/12 값이 지정된 MM/dd/yyyy 패턴은 A.D. 12년 1월 11일로 구문 분석됩니다. 01/02/3 또는 01/02/0003 값이 지정된 동일한 패턴은 A.D. 3년 1월 2일로 구문 분석됩니다. 동일한 방식으로 01/02/-3 값이 지정된 동일한 패턴은 B.C. 4년 1월 2일로 구문 분석됩니다.

구문 분석의 경우 패턴이 yy인 경우 구문 분석기는 현재 연도에 대해 상대적인 전체 연도를 판별합니다. 구문 분석기는 2자리 연도가 처리 시간 이후 20년 또는 이전 80년 내에 있는 것으로 가정합니다. 예를 들어, 현재 연도가 2007인 경우 01/11/12 값이 지정된 MM/dd/yy 패턴은 2012년 1월 11일로 구문 분석되고 05/04/64 값이 지정된 동일한 패턴은 1964년 5월 4일로 구문 분석됩니다.

패턴 문자의 수가 3자 이상인 경우 월은 텍스트 유형으로 해석됩니다. 그렇지 않으면 숫자 유형으로 해석됩니다.
밀리초
SSSS를 사용하여 INTERVAL 또는 TIMESTAMP 변수를 형식화하십시오. (변수를 선언하는 경우에는 ffff를 대신 사용하십시오.) 다음과 같은 예제를 생각해 보십시오.
t TIMESTAMP( "ssffff" );
s STRING = StrLib.formatTimestamp( t, "ssSSSS" );
일반 시간대
일반 시간대는 이름이 있는 경우 텍스트 유형으로 해석됩니다. GMT 오프셋 값을 나타내는 시간대의 경우 다음 구문이 사용됩니다.

GMTOffsetTimeZone = GMT Sign Hours Minutes

부호
+ 또는 -
시간
0 - 23 범위의 1자리 또는 2자리 숫자입니다. 형식은 로케일과 독립적이며 Unicode 표준의 기본 라틴 블록에서 가져와야 합니다.
00 - 59 범위의 2자리 숫자입니다. 형식은 로케일과 독립적이며 Unicode 표준의 기본 라틴 블록에서 가져와야 합니다.

구문 분석의 경우 RFC 822 시간대도 승인됩니다.

RFC 822 시간대
형식화의 경우 RFC 822 4자리 시간대 형식이 사용됩니다.

RFC822TimeZone = Sign TwoDigitHours Minutes

TwoDigitHours는 00 - 23 범위의 2자리 숫자여야 합니다. 기타 정의는 일반 시간대 유형과 동일합니다.

구문 분석의 경우 일반 시간대도 승인됩니다.

세기
전체 연도를 100으로 나눈 값(나머지 무시)을 표시하는 숫자 유형으로 표시됩니다.

다음 표에는 미국 로케일로 해석되는 날짜 및 시간 패턴의 몇 가지 예제가 나열됩니다. 모두 동일한 날짜인 태평양 일광 시간 2001년 7월 4일 오후 12시 8분 56초를 사용합니다.

날짜 및 시간 패턴 결과
yyyy.MM.dd G 'at' HH:mm:ss z 2001.07.04 AD at 12:08:56 PDT
EEE, MMM d, ''yy Wed, Jul 4, '01
h:mm a 12:08 PM
hh 'o''clock' a, zzzz 12 o'clock PM, Pacific Daylight Time
K:mm a, z 0:08 PM, PDT
yyyyy.MMMMM.dd GGG hh:mm aaa 02001.July.04 AD 12:08 PM
EEE, d MMM yyyy HH:mm:ss Z Wed, 4 Jul 2001 12:08:56 -0700
yyMMddHHmmssZ 010704120856-0700

달력 지정자

날짜/시간 형식 지정자는 달력 지정자도 포함할 수 있습니다. 이 지정자는 EGL이 입력을 위한 날짜 문자열을 구문 분석하거나 출력을 위한 날짜 문자열을 형식화하는 데 사용하는 달력 시스템을 표시합니다. EGL은 지정된 달력에 대한 문자열 날짜와 DATE, TIME 또는 TIMESTAMP 변수의 내부 값 사이의 변환을 수행합니다.

2자 달력 지정자는 날짜 패턴의 시작 부분에 있어야 하며 첫 번째 문자가 대문자이고 두 번째 문자가 소문자여야 합니다. 다음 표에는 사용 가능한 달력이 나열됩니다.
표 1. 달력
달력 지정자 달력
Bu 불교력
Ch 중국력
Gr 그레고리력
He 유대력
Is 이슬람력
Ja 일본력

다양한 달력 시스템의 현지화된 날짜 문자열은 다른 로케일에서 인쇄 불가능할 수 있기 때문에 이 주제는 빠르게 복잡해집니다. 다양한 달력이 연도 번호 매기기를 위한 다양한 시작점과 다양한 연대 지정자를 사용하며 이들 중 다수는 특정 현지화된 환경에서만 제대로 표시됩니다. 예를 들어, 일본 왕실 날짜 체계는 일본 왕의 재위 기간 및 구식인 율리우스력(그레고리력보다 며칠 뒤처짐)에 날짜를 결합합니다.

다음 코드 단편에서는 날짜를 그레고리력에서 일본력으로 변환하는 한 가지 방식을 보여줍니다.
myDate DATE;
myJapaneseDate STRING;

strLib.defaultDateFormat = "Gryyyy/MM/dd";
myDate = "1912/08/13";
myJapaneseDate = formatDate(myDate,"JaGyy/MM/dd");
사용자의 시스템이 일본을 위해 현지화된 경우에는 strLib.defaultDateFormat을 설정하여 일본력을 사용하고 myDate를 일본력 날짜로 설정할 수 있습니다. EGL은 기본 날짜 형식에 따라 날짜 문자열을 구문 분석한 후 8자리 그레고리력 날짜로 저장합니다.

다음 표에는 위에서 지정된 일본 연대 형식으로 변환된 대로 샘플 그레고리력 날짜가 나열되어 있습니다. 대괄호 안의 이름은 특정 일본 연대에 대한 4개의 2바이트 일본어 문자를 나타냅니다.

표 2.
그레고리력 날짜 일본 연대 기반 날짜
1868/09/20 [Meiji]01/09/08
1912/08/12 [Meiji]45/07/30
1912/08/13 [TaishÅ?]01/07/31
1927/01/07 [TaishÅ?]15/12/25
1927/01/08 [ShÅ?wa]01/12/26
1989/01/20 [ShÅ?wa]64/01/07
1989/01/21 [Heisei]01/01/08
2005/01/14 [Heisei]17/01/01

EGL은 Java™ 버전의 ICU(International Components for Unicode) 라이브러리(ICU4J)를 사용하여 입력 및 표시를 위해 필요한 날짜 변환을 수행합니다. 하지만 EGL은 항상 8자리 숫자를 사용하여 그레고리력 양식으로 날짜를 저장합니다. 이는 태국어 애플리케이션이 불교력의 날짜를 요청하는 경우 EGL은 변환을 위해 ICU4J를 사용하여 8자리 그레고리력 양식으로 해당 날짜를 저장합니다. 애플리케이션이 사용하는 패턴의 일관성을 유지하는 한 이 프로세스는 프로그래머와 사용자 모두에게 표시되지 않습니다.

호환성

표 3. 날짜/시간 형식에 대한 호환성 고려사항
플랫폼 문제
COBOL 생성
  • TIMESTAMP 형식의 경우 사용자가 지정하는 모든 컴포넌트는 인접해야 합니다. 예를 들어, 월과 일은 지정할 수 있지만 월과 시는 지정할 수 없습니다.
  • 밀리초(ffffff)를 지정할 수 있지만 시스템 시간 검색 시 처음 2바이트만 설정되며 밀리초의 나머지 바이트는 0으로 설정됩니다.
  • 형식화 패턴 W 및 w를 사용하는 경우 COBOL 생성에서는 ISO 8601 표준을 지원하지 않으므로 ISO 8601 결과를 제공하지 않습니다. 이 결과는 Java 생성 및 디버거와 일관되지 않을 수 있습니다.
DB2® 이 표의 "COBOL 생성" 항목을 참조하십시오.
Rich UI Rich UI 날짜 및 시간 지원을 참조하십시오.