달력 날짜 및 시간 관리

Flash Player 9 이상, Adobe AIR 1.0 이상

ActionScript 3.0의 달력 날짜 및 시간 관리 함수는 최상위 Date 클래스에 집중되어 있습니다. Date 클래스에는 UTC(Coordinated Universal Time) 또는 시간대별 현지 시간에서 날짜 및 시간을 처리할 수 있는 메서드 및 속성이 들어 있습니다. UTC는 기본적으로 그리니치 표준시(GMT)와 동일한 표준 시간 정의입니다.

Date 객체 생성

Date 클래스는 모든 기본 클래스 중에서 가장 다양한 생성자 메서드를 제공하는 클래스입니다. 이 메서드는 네 가지 방법으로 호출할 수 있습니다.

첫 번째로, 매개 변수가 없는 경우 Date() 생성자에서 사용자 시간대의 현지 시간을 기준으로 현재 날짜와 시간을 포함하는 Date 객체를 반환합니다. 다음 예제을 참조하십시오.

var now:Date = new Date();

두 번째로, 단일 숫자 매개 변수가 지정된 경우 Date() 생성자는 이를 1970년 1월 1일 이후로 경과된 밀리초로 처리하여 해당하는 Date 객체를 반환합니다. 즉, 전달된 밀리초 값은 표준시(UTC) 기준 1970년 1월 1일 이후로 경과된 밀리초로 처리됩니다. 하지만 Date 객체는 사용자가 UTC 특정 메서드를 사용하여 검색하고 표시하지 않는 한 현지 시간대로 값을 표시합니다. 단일 밀리초 매개 변수를 사용하여 새로운 Date 객체를 생성하는 경우 현지 시간과 표준시(UTC) 사이의 시차를 고려해야 합니다. 다음 명령문은 표준시(UTC) 기준 1970년 1월 1일 자정으로 설정된 Date 객체를 생성합니다.

var millisecondsPerDay:int = 1000 * 60 * 60 * 24; 
// gets a Date one day after the start date of 1/1/1970 
var startTime:Date = new Date(millisecondsPerDay);

세 번째로, 여러 숫자 매개 변수를 Date() 생성자로 전달할 수 있습니다. 생성자는 전달된 매개 변수를 각각 연, 월, 일, 시, 분, 초 및 밀리초로 처리하고 해당하는 Date 객체를 반환합니다. 이러한 입력 매개 변수는 표준시(UTC)가 아니라 현지 시간으로 간주됩니다. 다음 명령문은 현지 시간 2000년 1월 1일 자정으로 설정된 Date 객체를 가져옵니다.

var millenium:Date = new Date(2000, 0, 1, 0, 0, 0, 0);

네 번째로, 단일 문자열 매개 변수를 Date() 생성자로 전달할 수 있습니다. 생성자는 해당 문자열을 날짜 및 시간 구성 요소로 파싱한 다음 해당하는 Date 객체를 반환합니다. 이 방법을 사용하는 경우 Date() 생성자를 try..catch 블록에 포함하여 모든 파싱 오류를 트랩하는 것이 좋습니다. Date() 생성자는 Adobe Flash 플랫폼용 Adobe ActionScript 3.0 참조 설명서에 나열된 여러 문자열 형식을 사용합니다. 다음 명령문은 문자열 값을 사용하여 새 Date 객체를 초기화합니다.

var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM");

Date() 생성자가 문자열 매개 변수를 성공적으로 파싱하지 못하는 경우에도 예외가 발생하지 않습니다. 하지만 결과 Date 객체에 잘못된 날짜 값이 포함됩니다.

시간 단위 값 가져오기

Date 클래스의 속성 또는 메서드를 사용하여 Date 객체 내의 여러 시간 단위 값을 추출할 수 있습니다. 다음 각 속성을 사용하여 Date 객체에서 시간 단위 값을 가져올 수 있습니다.

  • fullYear 속성

  • month 속성(1월의 0에서 12월의 11까지 숫자 형식 사용)

  • date 속성(1부터 31까지 범위의 달력 날짜 사용)

  • day 속성(일요일에 0 등 요일에 숫자 형식 사용)

  • hours 속성(0 ~ 23 사용)

  • minutes 속성

  • seconds 속성

  • milliseconds 속성

    실제로 Date 클래스를 사용하면 여러 가지 방법으로 이 값을 가져올 수 있습니다. 예를 들어, 다음 네 가지 방법으로 Date 객체의 월 값을 가져올 수 있습니다.

  • month 속성

  • getMonth() 메서드

  • monthUTC 속성

  • getMonthUTC() 메서드

    기본적으로 네 방법 모두 효율적이기 때문에 응용 프로그램에 따라 가장 적합한 방법을 사용하면 됩니다.

    나열된 속성은 모두 총 날짜 값의 구성 요소를 나타냅니다. 예를 들어, milliseconds 속성은 999보다 클 수 없으며, 이는 값이 1000에 도달하면 초 값이 1 증가하고 milliseconds 속성이 0으로 재설정되기 때문입니다.

    표준시 기준 1970년 1월 1일 이후로 경과된 밀리초로 Date 객체 값을 얻으려면 getTime() 메서드를 사용할 수 있습니다. 이에 대응되는 setTime() 메서드를 사용하면 표준시 기준 1970년 1월 1일 이후로 경과된 밀리초를 사용하여 기존 Date 객체를 변경할 수 있습니다.

날짜 및 시간 계산 수행

Date 클래스를 사용하여 날짜 및 시간에 대해 더하기 및 빼기를 수행할 수 있습니다. 날짜 값은 내부적으로 밀리초로 단위로 보관되므로 Date 객체에서 날짜 값을 더하거나 빼기 전에 값을 밀리초로 변환해야 합니다.

응용 프로그램에서 날짜 및 시간 계산을 많이 수행하는 경우에는 다음과 같이 상수를 생성하여 밀리초로 환산된 공통 시간 단위 값을 보관하는 것이 유용합니다.

public static const millisecondsPerMinute:int = 1000 * 60; 
public static const millisecondsPerHour:int = 1000 * 60 * 60; 
public static const millisecondsPerDay:int = 1000 * 60 * 60 * 24;

표준 시간 단위를 사용하여 날짜 계산을 편리하게 수행할 수 있습니다. 다음 코드는 getTime()setTime() 메서드를 사용하여 날짜 값을 현재 시간부터 한 시간으로 설정합니다.

var oneHourFromNow:Date = new Date(); 
oneHourFromNow.setTime(oneHourFromNow.getTime() + millisecondsPerHour);

날짜 값을 설정하는 또 다른 방법은 단일 밀리초 매개 변수를 사용하여 새 Date 객체를 생성하는 것입니다. 예를 들어, 다음 코드는 한 날짜에 30일을 더하여 다른 날짜를 계산합니다.

// sets the invoice date to today's date 
var invoiceDate:Date = new Date(); 
 
// adds 30 days to get the due date 
var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay));

그런 다음 millisecondsPerDay 상수에 30을 곱해 30일의 시간을 나타내고 그 결과를 invoiceDate 값에 더하여 dueDate 값을 설정합니다.

시간대 간 변환

날짜 및 시간 계산은 날짜를 한 시간대에서 다른 시간대로 변환하고 싶은 경우에도 유용합니다. getTimezoneOffset() 메서드도 마찬가지이며, 이 메서드는 Date 객체의 시간대와 표준시의 차이를 분 값으로 반환합니다. 분 값으로 반환하는 이유는 일부 시간대가 시간 간격으로 시차가 설정되지 않고 옆 시간대에서 30분 차이가 나기도 하기 때문입니다.

다음 예제에서는 시간대 오프셋을 사용하여 현지 시간에서 표준시로 날짜를 변환합니다. 다음과 같이 먼저 밀리초 단위로 시간대 값을 계산한 다음 해당 값만큼 Date 값을 조정합니다.

// creates a Date in local time 
var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM"); 
 
// converts the Date to UTC by adding or subtracting the time zone offset 
var offsetMilliseconds:Number = nextDay.getTimezoneOffset() * 60 * 1000; 
nextDay.setTime(nextDay.getTime() + offsetMilliseconds);