ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1080) N
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (184)
      • Unreal (69)
      • Unity (104)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (238) N
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (58) N
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (351)
      • C++ (168)
      • C# (90)
      • Java (9)
      • Python (35)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (20)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 문자열
  • c#
  • 유니티
  • 오블완
  • 파이썬
  • C
  • 배열
  • 티스토리챌린지
  • 함수
  • Unity
  • 백준
  • 클래스
  • 포인터
  • SQL
  • 언리얼
  • 알고리즘
  • 그래픽스
  • C++
  • string
  • python

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

프로그래밍 언어/C#

C# DateTime & TimeSpan

2023. 6. 26. 14:11

DateTime

날짜와 시간을 나타내기 위해 사용한다.

DateTime dt = new DateTime(2016, 08, 24);

기본 생성은 년, 월, 일을 사용해서 초기화 하는 것이다.

DateTime dt = new DateTime(2016, 08, 24, 23, 30, 12);
Console.WriteLine(dt.ToString());

시, 분, 초 까지 줘서 초기화 할 수 도 있다.

info["date"] = DateTime.Now;

현재 시간은 DateTime.Now 프로퍼티를 사용해서 얻을 수 있다.

Console.WriteLine(default(DateTime));

기본 값은 default(DateTime)으로 얻을 수 있으며, 0001-01-01 00:00:00 이다.

DateTime to = DateTime.Today;

오늘 날짜는 DateTime.Today를 사용하면 된다.

tomorrow = to.AddDays(1);
yesterday = to.AddDays(-1);

특정일을 기준으로 몇일 전/후는 AddDays()를 사용하면된다.
마찬가지로 몇달 전/후는 AddMonths()를 사용한다.

DateTime dt = new DateTime(2016, 08, 24);
DateTime date = dt.Date;
DateTime time = dt.Time;

DateTime에서 날짜와 시간 부분을 분리하려면, Date와 Time 프로퍼티를 사용하면 된다.

DateTime dt = new DateTime(2016, 08, 24, 23, 30, 12, 123);

초기화시 밀리세컨드 단위를 추가 할 수 있다.

Console.WriteLine(dt.ToString("yyyy-MM-dd hh:mm:ss"));

ToString()안쪽에 포멧 문자열을 사용할 수 있다.
출력결과: 2016-08-24 11:30:12

Console.WriteLine(dt.ToString("yyyy-MM-dd HH:mm:ss"));

시간 부분에 대문자 HH를 쓰면 24시간 단위로 출력한다 (소문자는 12시간).
출력결과: 2016-08-24 23:30:12

Console.WriteLine(dt.ToString("yyyy-MM-dd hh:mm:ss.ff"));

미리세컨 부분은 ff를 사용해서 표시한다. 이때 f가 2개 이므로 2자리만 출력한다.
출력결과: 2016-08-24 11:30:12.12

Console.WriteLine(dt.ToString("yyyy-MM-dd hh:mm:ss.fff"));

미리세컨 3자리까지 표시하고 싶으면 fff를 쓰면 된다.
출력결과: 2016-08-24 11:30:12.123

dt.DayOfWeek == DayOfWeek.Saturday || 
dt.DayOfWeek == DayOfWeek.Sunday

DayOfWeek 프로퍼티는 요일을 나타내며, 요일에 해당하는 이넘 값은 DayOfWeek.Sunday, DayOfWeek.Monday 등이 있다.

dt.ToLocalTime();

ToLocalTime() 메소드를 사용해서 로컬 타임을 얻을 수 있다. 

dt.ToUniversalTime();

UTC는 ToUniversalTime()을 사용해서 얻을 수 있다.

DateTime dt = new DateTime(2016, 08, 24, 23, 30, 12);
Console.WriteLine(dt.ToLocalTime());
Console.WriteLine(dt.ToUniversalTime());

DateTime을 만들 때 UTC (DateTimeKind.Utc) 또는 Local (DateTimeKine.Local)를 지정할 수 있는데, 아무값도 지정하지 않으면 DateTimeKind.Unspecified 로 처리된다.
우리나라 시간은 UTC +9 라는 것을 먼저 기억하자
DateTimeKind.Unspecified 일때 ToLocalTime()을 호출하면 무조건 9시간을 빼고, ToUniversalTime()을 호출하면 9시간을 더한다.
따라서 위 코드의 출력은,
2016-08-25 오전 8:30:12
2016-08-24 오후 2:30:12

DateTime dt = new DateTime(2016, 08, 24, 23, 30, 12, DateTimeKind.Utc);
Console.WriteLine(dt.ToLocalTime());
Console.WriteLine(dt.ToUniversalTime());

이렇게 UTC로 지정하고 호출하면,
2016-08-25 오전 8:30:12
2016-08-24 오후 11:30:12

 

ToLocalTime()은 +9를 하고, ToUniversalTime()은 변화가 없다.

DateTime dt = new DateTime(2016, 08, 24, 23, 30, 12, DateTimeKind.Local);
Console.WriteLine(dt.ToLocalTime());
Console.WriteLine(dt.ToUniversalTime());

반대로 Local로 지정하고 호출하면,

2016-08-24 오후 11:30:12
2016-08-24 오후 2:30:12

 

ToLocalTime()은 변화가 없고, ToUniversalTime()만 -9가 된다.

string date = "20160824";
DateTime dt = DateTime.ParseExact(date, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(dt);

임의의 문자열을 DateTime으로 바꿀 때는 ParseExact()를 사용한다.
위의 예에서는 입력 스트링이 "20160824"이므로 두번째 파라미터에 "yyyy-MM-dd"를 준 것이다.
만약 입력 스트링이 "08:24:2016" 이라면 포멧 스트링을 "MM:dd:yyyy" 이렇게 주면된다.

TimeSpan

TimeSpan는 특정 시간을 나타내는 것이 아니고 '몇일, 몇시간, 몇분, 몇초'와 같은 시간의 크기를 나타내며, 대부분 DateTime과 함께 사용한다.

string date = "20160824132415";
DateTime dt = DateTime.ParseExact(date, "yyyyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(dt);

TimeSpan ts = new TimeSpan(0, 24, 0);
dt = dt - ts;
Console.WriteLine(dt);

위 코드는 2016-08-24 13:24:15 에서 24분을 빼는 동작이다. 따라서 결과는,

2016-08-24 오후 1:24:15
2016-08-24 오후 1:00:15

 

TimeSpan ts = TimeSpan.ParseExact("2400", "mmss", System.Globalization.CultureInfo.InvariantCulture);

TimeSpan도 ParseExact를 사용해서 시간을 지정 할 수 있다. 위 코드에서는 값에 분초(2400)만 있으므로, 포멧 문자열도 mmss를 사용했다.

Console.WriteLine(default(TimeSpan));

TimeSpan의 기본값은 00:00:00 이다.

TimeSpan span = TimeSpan.FromMinutes(120);
Console.WriteLine(span);

TimeSpan sec = TimeSpan.FromSeconds(1);

TimeSpan.FromMinutes(분), FromSeconds(초), FromHours(시간)을 사용해서 해당 단위의 TimeSpan을 지정 할 수 있다.

TimeSpan tod = dt.TimeOfDay;
Console.WriteLine(tod);

DateTime오브젝트의 TimeOfDay 프로퍼티를 사용해서 TimeSpan 값 (시간의 크기)를 얻을 수 있다.

TimeSpan ts1 = new TimeSpan(00, 30, 00);
TimeSpan ts2 = TimeSpan.FromMinutes(20);
TimeSpan diff = ts1 - ts2;
Console.WriteLine(diff);

TimeSpan간의 연산이 가능하며, 결과는 TimeSpan이 된다.
위에서는 30분에서 20분을 뺏으므로, 결과는 10분이 된다.

TimeSpan diff = new TimeSpan(1, 30, 30);
Console.WriteLine(diff.Hours);
Console.WriteLine(diff.Minutes);
Console.WriteLine(diff.Seconds);
Console.WriteLine(diff.TotalHours);
Console.WriteLine(diff.TotalMinutes);
Console.WriteLine(diff.TotalSeconds);

TimeSpan의 시, 분, 초 항목은 Hours, Minutes, Seconds 를 사용하면 된다.


이때 주의 할 점은 시/분/초를 별개의 항목으로 간주한다는 것이며, 전체 값을 시, 분, 초로 변환하고 싶으면 앞에 Total이 붙은 프로퍼티를 사용해야 한다 (이 값을 많이 씀).


위 코드의 실행 결과는,

1
30
30
1.50833333333333
90.5
5430

 

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ntkor&logNo=220794971361

저작자표시 (새창열림)

'프로그래밍 언어 > C#' 카테고리의 다른 글

.NET 환경의 컴파일 과정 - CLR, CIL, JIT, AOT  (0) 2023.07.16
C# 날짜 관련 함수(DateTime)  (0) 2023.06.26
C# 각 타입별로 접근제한자 (Access Modifiers)  (0) 2023.06.26
C# 문자열 배열을 int 배열로 변환  (1) 2023.06.16
C# Equals, ==, ReferenceEquals 비교  (0) 2023.06.14
    '프로그래밍 언어/C#' 카테고리의 다른 글
    • .NET 환경의 컴파일 과정 - CLR, CIL, JIT, AOT
    • C# 날짜 관련 함수(DateTime)
    • C# 각 타입별로 접근제한자 (Access Modifiers)
    • C# 문자열 배열을 int 배열로 변환
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바