날짜 시간.지금 대 날짜 시간.UtcNow
저는 두 속성이 어떻게 작동하는지에 대한 원리가 정확히 무엇인지 궁금합니다.두 번째 것은 보편적이고 기본적으로 시간대를 다루지 않는 것으로 알고 있습니다만, 누가 시간대가 어떻게 작동하고 어떤 시나리오에서 어떤 것을 사용해야 하는지 자세히 설명해 주시겠습니까?
날짜 시간.UtcNow는 그리니치 표준시라고도 하는 조정된 표준시에 있는 날짜와 시간을 알려줍니다. 기본적으로 런던 잉글랜드에 있는 경우와 비슷하지만 여름에는 그렇지 않습니다.날짜 시간.현재 로케일의 다른 사용자에게 표시되는 날짜와 시간을 제공합니다.
를 사용하는 것이 좋습니다.DateTime.Now
당신이 인간에게 데이트를 보여줄 때마다 - 그런 식으로 그들은 그들이 보는 가치에 편안해 합니다 - 그것은 그들이 시계나 시계에서 보는 것과 쉽게 비교할 수 있는 것입니다.사용하다DateTime.UtcNow
클라이언트-서버 모델에서 날짜를 저장하거나 나중에 계산할 때 서버와 다른 시간대에 있는 클라이언트 또는 서로 다른 시간대에 있는 클라이언트에 의해 계산이 혼동되지 않습니다.
그것은 정말로 매우 간단하기 때문에, 여러분의 청중이 무엇이고 어디에 사느냐에 따라 다르다고 생각합니다.
Utc를 사용하지 않는 경우, 날짜와 시간을 표시할 사용자의 시간대를 알아야 합니다. 그렇지 않으면 시스템이나 서버 시간에 오후 3시에 무슨 일이 발생했다고 말할 수 있습니다. 그들이 살고 있는 오후 5시에 실제로 무슨 일이 일어났는지 말입니다.
우리는 사용합니다.DateTime.UtcNow
왜냐하면 우리는 전 세계 웹 사용자들이 있고, 나는 모든 사용자들에게 그들이 어느 시간대에 살고 있는지를 나타내는 양식을 작성하라고 잔소리하는 것을 선호하지 않기 때문입니다.
또한 지구 어디에 살든 시간이 "똑같다"고 게시물이 충분히 경과할 때까지 상대 시간(2시간 전, 1일 전 등)을 표시합니다.
성능하십시오; 또한성유의십하시오에이차능오▁also시.DateTime.UtcNow
그보다 약 30배 더 빠릅니다.DateTime.Now
내부적으로 왜하면내으로적부냐▁intern.DateTime.Now
에서는 많은 시간대 조정을 수행하고 있습니다(Reflector를 사용하면 쉽게 확인할 수 있습니다).
사용하지 마십시오.DateTime.Now
상대 시간 측정의 경우.
.NET에서 이해해야 할 한 가지 주요 개념은 현재 시간대에 상관없이 지구 전체에 존재한다는 것입니다.따라서 변수를 로드하면DateTime.Now
또는DateTime.UtcNow
할당이 동일합니다.당신의DateTime
개체는 사용자가 어느 시간대에 있는지 알고 할당에 관계없이 이를 고려합니다.
DateTime.UtcNow
일광 절약 시간 경계에 걸쳐 날짜를 계산할 때 유용합니다.시간에 , 이 있습니다.", 일광절시시참간즉시여에하곳 25정는다있이경 25는있간음다정날정터지오까부오도 25우있경있다니간고이는우습도지까오터음에정 23오약서부는날시▁that니습다있경있도우▁time는즉시,▁savings▁that이▁is▁in▁places간▁hours▁sometimes,▁23▁daylight지정까다▁in▁participate,▁and▁between오▁noon▁23▁there오정부터날일▁hoursB에서 에 "A" "B" " " " " " " " " " 를 .TimeSpan
.
이것은 내가 쓴 블로그 게시물에 의해 다루어집니다. 더 자세히 설명합니다.TimeSpan
이 주제에 대한 훨씬 더 광범위한 MS 기사에 대한 링크가 포함되어 있습니다.
*backup: 시간이 됩니다.두 할당 모두 현재 시간을 저장합니다.두 변수를 하나씩 로드하는 경우DateTime.Now()
그리고 다른 하나는.DateTime.UtcNow()
그자리의 TimeSpan
는 시간이 가 GMT에서 몇할 수 .아래명바된같이와시,합니다.String
값은 다른 문자열을 표시합니다.
이것은 좋은 질문입니다.어떻게 하는지에 대해 좀 더 자세히 알려주기 위해 그것을 되살리고 있습니다.은 다른 과 함께 동작합니다.Kind
@Jan Zich의 사용 에 따라 이고, @Jan Zich의 @Jan Zich의 @Jan Zich의 @Jan Zich의 @Jan Zich의 @Jan Zich의 @Jan Zich의 여게가며듯지다따됩에속르사가설다니치정라부용이성한중요우매이적했제로실가▁different▁and다▁as니설치됩정▁it▁set▁outjan,다▁@ly▁a▁points▁property▁depending게▁you▁usejan▁is르▁important.Now
또는UtcNow
.
는 내적으로날다같저이장다니됩음과짜는부로 저장됩니다.Ticks
Camera의로) 를 .Now
또는UtcNow
.
DateTime.UtcNow
다른 언어처럼 동작합니다.정해집니다Ticks
GMT 기준 값으로 설정합니다.또한 설정됩니다.Kind
Utc
.
DateTime.Now
을 변경합니다.Ticks
GMT 시간대에서 하루 중 사용자의 시간인 경우 값을 지정합니다.또한 설정됩니다.Kind
Local
.
GMT-6 시간이 . (GMT-6) 6월 6일 GMT 입니다. 넷을 무시합니다.Kind
6시간 전인 것처럼 여기는 겁니다 '지금'이어야 하는데도 말이죠만약 당신이 그것을 만든다면 이것은 더욱 깨질 것입니다.DateTime
인스턴스(instance)를 선택한 다음 표준 시간대를 변경하여 사용해 보십시오.
'Kind' 값이 다른 DateTime 인스턴스가 호환되지 않습니다.
코드를 좀 볼까요?
DateTime utc = DateTime.UtcNow;
DateTime now = DateTime.Now;
Debug.Log (utc + " " + utc.Kind); // 05/20/2015 17:19:27 Utc
Debug.Log (now + " " + now.Kind); // 05/20/2015 10:19:27 Local
Debug.Log (utc.Ticks); // 635677391678617830
Debug.Log (now.Ticks); // 635677139678617840
now = now.AddHours(1);
TimeSpan diff = utc - now;
Debug.Log (diff); // 05:59:59.9999990
Debug.Log (utc < now); // false
Debug.Log (utc == now); // false
Debug.Log (utc > now); // true
Debug.Log (utc.ToUniversalTime() < now.ToUniversalTime()); // true
Debug.Log (utc.ToUniversalTime() == now.ToUniversalTime()); // false
Debug.Log (utc.ToUniversalTime() > now.ToUniversalTime()); // false
Debug.Log (utc.ToUniversalTime() - now.ToUniversalTime()); // -01:00:00.0000010
여기 보시는 것처럼 비교 및 수학 기능은 호환 가능한 시간으로 자동 변환되지 않습니다. 그Timespan
거의 한 시간이 됐어야 했는데, 대신에 거의 6시간이었습니다."utc < now"는 사실이어야 했지만(확실히 1시간을 추가하기도 했습니다), 여전히 거짓이었습니다.
여러분은 신은또어한디작단을보순시변간 '편환주변'으로다있니 '업습수볼'가 있는 이라면 어디서나 하는 '도 볼 수 .Kind
동일하지 않습니다.
질문에 대한 저의 직접적인 답변은 각 항목을 언제 사용해야 하는지에 대한 수락된 답변의 권고와 일치합니다.당신은 항상 당신과 함께 일하도록 노력해야 합니다.DateTime
이 있는 Kind=Utc
I/O(표시 및 구문 분석) 중을 제외합니다. 이은거항사한것의을다미니합다는야용것을 해야 한다는 합니다.DateTime.UtcNow
개체를 표시하기 위해 개체를 만들고 바로 삭제하는 경우는 제외합니다.
DateTime은 표준 시간대가 무엇인지 알지 못합니다.항상 사용자가 현지 시간에 있다고 가정합니다.UtcNow는 "시간에서 내 표준 시간대 제외"만 의미합니다.
표준 시간대 인식 날짜를 사용하려면 표준 시간대가 있는 날짜/시간을 나타내는 DateTimeOffset을 사용합니다.저는 그것을 힘든 방법으로 배워야만 했습니다.
질문에 대한 "단순한" 대답은 다음과 같습니다.
날짜 시간.현재 시스템 시간(시스템이 실행 중인 시간대에 관계없이)을 나타내는 DateTime 값을 반환합니다.날짜 시간입니다.Kind 속성은 DateTimeKind가 됩니다.로컬
날짜 시간.UtcNow는 현재 범용 조정 시간(UTC)을 나타내는 DateTime 값을 반환합니다. 이 값은 시스템의 시간대에 관계없이 동일합니다.날짜 시간입니다.Kind 속성은 DateTimeKind가 됩니다.Utc
위에서 언급한 요점에 조금 더 추가하면, DateTime 구조에는 Kind라는 조금 알려진 필드도 포함되어 있습니다(적어도 오랫동안 알지 못했습니다).기본적으로 시간이 로컬인지 UTC인지 나타내는 플래그일 뿐, 로컬 시간에 대한 UTC의 실제 오프셋은 지정하지 않습니다.어떤 의도로 구조가 구성되었는지를 나타내는 사실 외에도 ToUniversalTime() 및 ToLocalTime() 메서드가 작동하는 방식에도 영향을 미칩니다.
파티에 조금 늦었지만, 저는 이 두 링크(롤라 출신의 4명)가 매우 유용하다는 것을 알았습니다.
날짜/시간 값 저장에 UTC(Coordinated Universal Time) 사용
여러 시간대에 걸쳐 날짜 및 시간을 저장하고 표시하기 위한 조언
날짜 시간.UtcNow는 일광 절약 시간제를 제외한 범용 시간 척도입니다.따라서 UTC는 DST로 인해 변경되지 않습니다.
하지만, 날짜 시간.지금은 DST에 따라 변경되므로 연속형 또는 단일 값이 아닙니다.날짜 시간을 의미합니다.이제 동일한 시간 값이 두 번 발생하여 고객이 혼란스러운 상태에 빠질 수 있습니다.
응용 프로그램이 실행되는 시스템의 로컬 시간이 필요한 경우(예: CEST for Europe) 지금을 사용합니다.만약 당신이 보편적인 시간을 원한다면 - UtcNow.사용자가 사용하고 싶은 로컬 웹 사이트/독립 실행형 응용 프로그램을 만드는 것은 사용자의 시간대 설정인 DateTime의 영향을 많이 받습니다.지금이다.
웹 사이트의 경우 서버의 표준 시간대 설정입니다.따라서 사용자의 시간을 표시하는 경우 사용자가 원하는 시간대를 가져와 시간을 이동하거나(UTC 시간을 데이터베이스에 저장한 후 수정) UTC로 지정합니다.만약 당신이 그렇게 하는 것을 잊는다면, 사용자는 다음과 같은 것을 볼 수 있습니다: 3분 전에 게시된 다음 그 근처에서 미래의 시간 :).
날짜 시간.UtcNow는 연속적인 단일 값 시간 척도인 반면 DateTime은 단일 값 시간 척도입니다.지금은 연속형 또는 단일 값이 아닙니다.주요 원인은 UTC에 적용되지 않는 일광 절약 시간입니다.따라서 UTC는 현지 시간(날짜 시간)과 달리 한 시간 앞으로 뛰거나 뒤로 뛰지 않습니다.지금은) 그렇습니다.그리고 그것이 뒤로 점프할 때, 같은 시간 값이 두 번 발생합니다.
큰 차이점은:) 날짜 시간입니다.지금은 SharePoint Workflow에서 지원되지 않습니다. DateTime을 사용해야 합니다.UtcNow
언급URL : https://stackoverflow.com/questions/62151/datetime-now-vs-datetime-utcnow
'programing' 카테고리의 다른 글
인스턴스화 시 VB.NET Dictionary에 값을 삽입하는 방법은 무엇입니까? (0) | 2023.05.31 |
---|---|
CSS 강제 이미지 크기 조정 및 가로 세로 비율 유지 (0) | 2023.05.31 |
활동에 연결되지 않은 조각 MyFragment (0) | 2023.05.31 |
OSX의 홈브루에서 "cannot load the file --utils/open"을 방지하는 방법 (0) | 2023.05.31 |
탐색 모음 표시/숨기기 (0) | 2023.05.31 |