c\#의 DateTime 을 자세히 설명 합 니 다.

7193 단어 c#datetime
날짜 와 시간 은 우리 개발 에서 매우 중요 하 다.DateTime 은 C\#에서 날짜 와 시간 을 표현 하고 처리 하 는 데 사 용 됩 니 다.
본 고 는 DateTime 을 여러 해 동안 사용 한 것 으로 DateTime 대상 의 전체적인 응용 과 서로 다른 지역,시간 대,형식 등 내용 을 어떻게 처리 하 는 지 를 포함한다.
데이트 타임
우리 가 생각 하 는 것 과 달리 DateTime 은 하나의 클래스(class)가 아니 라 하나의 구조(struct)로System네 임 스페이스 에 존재 하 며 Dotnet Core 에서System.Runtime.dll에 있다.
DateTime 의 정 의 를 보십시오.

public struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, System.Runtime.Serialization.ISerializable
정의 에서 알 수 있 듯 이 DateTime 은IComparable,IConvertible,IEquatable,IFormattable,ISerializable를 실현 했다.따라서 DateTime 은 날짜 와 시간 에 관 한 많은 정 보 를 사용 할 수 있 습 니 다.
구조
DateTime 대상 을 초기 화 합 니 다.C\#는 11 가지 방식 으로 초기 화 되 었 습 니 다.필요 에 따라 년 월 일 시 분 초,그리고Ticks를 사용 할 수 있 습 니 다.Ticks은 C\#에서 독특한 정의 로 양력 0001 년 1 월 1 일 00:00:00.000 이후 겪 은 100 나 초 간격 이다.우 리 는 나 초,초,밀리초 와 초 사이 가 모두 1000 배의 관계 라 는 것 을 알 고 있 기 때문에 1 밀리초 는 10000 Ticks 와 같다.이 숫자 는 매우 중요 하 다.C\#자바 script 시간 으로 전환 할 때 이 대응 관 계 를 잘 알 아야 합 니 다.

DateTime date1 = new DateTime(2020, 7, 14);
DateTime date2 = new DateTime(2020, 7, 14, 14, 23, 40);
DateTime date3 = new DateTime(637303334200000000);
정적 필드
DateTime 은 세 개의 정적 필드 를 포함 합 니 다:
MinValue-DateTime 의 최소 값 은 양력 0001 년 1 월 1 일 00:00:00.000,Ticks 0 에 대응 합 니 다.
MaxValue-DateTime 의 최대 치 는 해당 양력 9999 를 보면 12 월 31 일 23:59:59.999,Ticks 는 3155378975999999 이다.
UnixEpoch-Unix,Javascript 에서 의 시간 기점 은 양력 1970 년 1 월 1 일 00:00:00.000 에 대응 하고 Ticks 는 62135596800000000 입 니 다. 
자 바스 크 립 트 에 서 는 1970 년 1 월 1 일 00:00:00.000 부터 지금까지 밀리초 단위 로 시간 이 저 장 됩 니 다.따라서 C\#시간 에서 자바 script 시간 으로 전환 하려 면 다음 코드 를 사용 할 수 있 습 니 다.

public static long ToUnixTicks(this DateTime time)
{
 return (long)TimeSpan.FromTicks(time.Ticks - DateTime.UnixEpoch.Ticks).TotalMilliseconds - TimeZoneInfo.Local.GetUtcOffset(time).Hours * 60 * 60 * 1000;
}
자 바스 크 립 트 에 도입 시간:

var time = new Date().setTime(unix_ticks);
전환 이 완 료 됐 습 니 다.
방법
DateTime 은 DateTime 대상 을 조작 하 는 여러 가지 방법 을 제공 합 니 다.날짜 에 일수,시간,분,초,날짜 차이,문자열 분석 에서 datetime 대상,통용 시간 획득 등 을 처리 합 니 다.여 기 는 상세 하 게 말 하지 않 겠 습 니 다.필요 하면 마이크로소프트 문 서 를 찾 아 보 세 요.아주 상세 합 니 다.
몇 가지 예 를 들 면:

TimeSpan duration = new System.TimeSpan(30, 0, 0, 0);
DateTime newDate1 = DateTime.Now.Add(duration);

DateTime today = DateTime.Now;
DateTime newDate2 = today.AddDays(30);

string dateString = "2020-07-14 14:23:40";
DateTime dateTime12 = DateTime.Parse(dateString);

DateTime date1 = new System.DateTime(2020, 7, 13, 14, 20, 10);
DateTime date2 = new System.DateTime(2020, 7, 14, 14, 25, 40);
DateTime date3 = new System.DateTime(2020, 7, 14, 14, 25, 40);

TimeSpan diff1 = date2.Subtract(date1);
DateTime date4 = date3.Subtract(diff1);
TimeSpan diff2 = date3 - date2;

DateTime date5 = date2 - diff1;
속성
DateTime 은 날짜 의 디 테 일 을 쉽게 추출 할 수 있 도록 년 월 일 분 초 및 기타 속성 을 제공 합 니 다.

DateTime myDate = new DateTime(2020, 7, 14, 14, 23, 40);
int year = myDate.Year; 
int month = myDate.Month;
int day = myDate.Day;
int hour = myDate.Hour;
int minute = myDate.Minute;
int second = myDate.Second;
int weekDay = (int)myDate.DayOfWeek;
string weekString = myDate.DayOfWeek.ToString();
그 중에서 도 데 이 오 프 위 크 는 날짜 가 무슨 요일 인지 판단 하 는 데 사용 되 며 매 거 진 값 이다.주의 하 세 요.관례 에 따 르 면 일주일 은 일요일 부터 시작 되 기 때문에 0 은 일요일,6 은 토요일 을 의미 합 니 다.
DateTimeKind,로 컬 시간(LocalTime),UTC 시간(UTC)을 기반 으로 하거나 지정 하지 않 음(Unspecified)을 정의 하 는 데 사 용 됩 니 다.
대부분의 상황 에서 우 리 는 시간 을 정의 하면 년 월 일 시 분 초 를 직접 정의 합 니 다.예 를 들 어 다음 과 같 습 니 다.

DateTime myDate = new DateTime(2020, 7, 14, 14, 23, 40);
이런 정의 에서 이 시간 은 바로Unspecified의 것 이다.
사용 할 때 응용 과정 에서 시간 전환 을 하지 않 고 이런 방식 으로 계속 사용 하면 아무런 문제 가 없 을 것 이다.그러나 어떤 경우 에는 다 국적 애플 리 케 이 션 의 시간 처리,예 를 들 어 MongoDB 등 데이터베이스 에 데 이 터 를 저장 할 때 UTC 시간 을 강제로 사용 하 는 등 시간 전환 이 발생 할 수 있다.이런 상황 에서 처리 시간 은 반드시LocalTime또는UTC시간 을 사용 해 야 한다.

DateTime myDate = new DateTime(2020, 7, 14, 14, 23, 40, DateTimeKind.Local);

DateTime myDate = new DateTime(2020, 7, 14, 14, 23, 40, DateTimeKind.Unspecified);
그렇지 않 으 면 시간 유형 이 불확실 한 상황 에서 시간 전환 에 문제 가 생 길 수 있다.
아래 의 예 를 보 세 요.

DateTime myDate = new DateTime(2020, 7, 14, 14, 23, 40);

var date1 = myDate.ToLocalTime();
Console.WriteLine(date1.ToString());
/* 7/14/2020 22:23:40 PM */

var date2 = myDate.ToUniversalTime();
Console.WriteLine(date2.ToString());
/* 7/14/2020 6:23:40 AM */
ToLocalTime방법 을 사용 할 때Unspecified시간 은 자신 이 UTC 시간 이 라 고 생각 하고ToUniversalTime사용 할 때Unspecified시간 은 자신 이LocalTime시간 이 라 고 생각 하여 시간 적 전환 오 류 를 초래한다.
6.시간 대상 의 가감 및 비교
DateTime 대상 의 가감 및 비교적 편리 합 니 다.보기:

DateTime date1 = new System.DateTime(2020, 7, 14);

TimeSpan timeSpan = new System.TimeSpan(10, 5, 5, 1);
DateTime addResult = date1 + timeSpan;
DateTime substarctResult = date1 - timeSpan; 

DateTime date2 = new DateTime(2020, 7, 14);
DateTime date3 = new DateTime(2020, 7, 15);

bool isEqual = date2 == date3;
7.날짜 의 포맷
날짜 의 포맷 은 관련 DateTime 인터넷 에서 가장 많이 묻 고 찾 은 내용 입 니 다.
이런 시계 가 있 습 니 다.

이 시 계 를 대조 하면 된다.

date.ToString("yyyy-MM-dd HH:mm:ss");
음력
DateTime 자 체 는 달력 Calendar 클래스 에 의존 합 니 다.Calendar 는 System.Globalization 네 임 스페이스 에서 도 System.Runtime.dll 에 있 는 추상 적 인 클래스 입 니 다.캘 린 더 클래스 아래 에는 다양한 종류의 달력 이 제공 되 어 있 습 니 다.우리 와 관련 된 것 은 중국의 음력 Chinese LunisolarCalendar 입 니 다.
사용 도 간단 하 다.

Calendar calendar = new ChineseLunisolarCalendar();

DateTime date = new DateTime(2020, 06, 24, calendar);
/* 7/14/2020 00:00:00 AM */
음,음력 을 자주 보 는 친구 들 은 오늘 이 음력 5 월 24 인 데 왜 여기에 6 월 24 라 고 쓰 여 있 습 니까?오늘 은 4 월 이 윤달 이기 때문에 음력 5 월 은 실제로 이 음력 6 개 월 째다.
그럼 어느 달 이 윤달 인지 아 닌 지 어떻게 판단 합 니까?

Calendar calendar = new ChineseLunisolarCalendar();

bool is_leapYear = calendar.IsLeapYear(2020);
bool is_leapMonth = calendar.IsLeapMonth(2020, 5);
bool is_leapDay = calendar.IsLeapDay(2020, 5, 26);
마찬가지 로 우 리 는 양력 으로 음력 을 돌 릴 수 있다.

DateTime date = DateTime.Now;

Calendar calendar = new ChineseLunisolarCalendar();

int year = calendar.GetYear(date);
/* 2020 */
int month = calendar.GetMonth(date);
/* 6 */
int day = calendar.GetDayOfMonth(date);
/* 24 */
마이크로소프트 가 실현 하 는 기능 이 우리 가 생각 했 던 것 보다 많다 는 것 을 발 견 했 습 니까?
이상 은 c\#의 DateTime 에 대한 상세 한 내용 입 니 다.c\#datetime 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기