본문 바로가기
백엔드/C#

DateTimeOffset 타입

by 1005ptr 2021. 3. 4.
반응형

이번에 개발하는 프로그램은 전 세계에서 사용할 수 있는 프로그램이다.

 

기존에 회사의 프레임워크는 한 국가도 아니고 한 장소에서만 사용하는 프로그램으로 타임존 정보를 고려해서 데이터를 저장할 필요가 없었다.

 

그런데 이렇게 여러 국가에서 시간 정보가 입력되는 환경으로 변하면서 시간대(TimeZone) 정보를 저장해야 되는 필요성이 생겼다.

 

 

C#에는 DateTime, DateTimeOffset 두가지 시간 자료형이 있다.

 

기존 프로그램에서는 시간을 나타낼 때 DateTime 타입만 사용했다.

Base 단의 대응도 DateTime 기준으로만 동작하는 부분이 존재했다.

그래서 서버와의 송수신에는 DateTimeOffset을 사용하고

 

클라이언트에 보여줄때는 Local~~ 이라는 이름의 DateTime 타입을 별도로 만들었다.

로컬 시간을 보여주고, 값이 들어오면 현지 시간대 정보를 추가해서 업데이트한다.

 

DateTimeOffset 자료형에는 LocalDateTime이라는 값이 있다.

LocalDateTime은 컴퓨터의 표준 시간대 정보에 따라 현지 시간 정보를 DateTime 타입으로 반환한다.

컴퓨터의 표준 시간대 확인은 아래 사진 참고

 

추가로 게터안에 ZonedDate에 Value가 붙는 이유는 널 값이 들어갈 수 있도록 DateTimeOffset? 를 썼기 때문

C#에서는 값 타입에 물음표를 붙이면 널 값을 넣을 수 있다.

public DateTime LocalDateTime
{
    get
    {
        if (ZonedDate.HasValue)
            return ZonedDate.Value.LocalDateTime;
        else
            return new DateTime();
    }
    set
    {
        if (value.Equals(new DateTime()))
        {
            value = DateTime.Now;
        }
        TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(DateTimeOffset.Now);
        ZonedDate = new DateTimeOffset(value, offset);
    }
}

참고

docs.microsoft.com/ko-kr/dotnet/standard/datetime/

 

날짜, 시간 및 표준 시간대

자세한 정보: 날짜, 시간 및 표준 시간대

docs.microsoft.com

 

반응형

댓글