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 배열로 변환 (0) | 2023.06.16 |
C# Equals, ==, ReferenceEquals 비교 (0) | 2023.06.14 |