c\#의 DateTime 을 자세히 설명 합 니 다.
본 고 는 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 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.