문제

무엇이 유용한 방법으로 시스템의 시간으로 LocalDateTime 에 Noda 시간입니까?가장 직접적인 방법을 생각하의 것

var dt = DateTime.Now
LocalDateTime systemTime = new LocalDateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute);

하지만 주어진 노다 시간 전체 목적은 교체 DateTime 무언가에있는 더 좋은 의미, 정이 있었 선호하는 방법이 사용하는 것보다 DateTime 위의 방식이다.최고의 내에 오를 수 있을 사용하여 Noda 의 시설

var zone = NodaTime.TimeZones.BclDateTimeZone.ForSystemDefault();
LocalDateTime systemTime = SystemClock.Instance.Now.InZone(zone).LocalDateTime;

하지만 이것은 아주 자세한 정보를 표시합니다.

도움이 되었습니까?

해결책

당신의 두 번째 예는 정확히 어떻게 당신이 이것을 할 것입니다.그 자세한 정보를 표시합니다.보 Noda 시의 디자인 철학.

그것의 생각에는 세 가지 부분

  1. 현재 순간에 시간:

    // Instant now = SystemClock.Instance.Now;               // NodaTime 1.x
    Instant now = SystemClock.Instance.GetCurrentInstant();  // NodaTime 2.x
    
  2. 시스템의 시간대에 있습니다.(선호되는 구문)

    DateTimeZone tz = DateTimeZoneProviders.Bcl.GetSystemDefault();
    
  3. 적용되는 시간대를 즉시:

    ZonedDateTime zdt = now.InZone(tz);
    

당신의 마지막 단계에서 얻어 LocalDateTime 는 사실을 인식하는 당신이 그것을 할 때,당신은 벗겨 모든 시간대 정보입니다."로컬에서"NodaTime 가 의"로컬 컴퓨터 코드는 실행하는".(다시 말해,그것과 같지는 않지 DateTimeKind.Local)

추가적인 것들에 대해 생각:

  • 수도 있습을 추상적인 시계를 사용하는 IClock 인터페이스::

    IClock clock = SystemClock.Instance;
    // Instant now = clock.Now;               // NodaTime 1.x
    Instant now = clock.GetCurrentInstant();  // NodaTime 2.x
    

    그런 다음 전달할 수 있습에서 시계 방법으로 매개 변수 또는 주사 그것으로 좋아하는 DI/IoC framework.(Autofac,Ninject,StructureMap 무엇이든,...).이점은 다음을 사용할 수 있다 NodaTime.Testing.FakeClock 의 단위 테스트를 확인할 수 있습니다보 단위 테스트 Noda 시간 자세한 내용은.

  • 수도 있습니다호에서 통과하기 DateTimeZone 그래서 당신이 할 수 있는 코드를 실행하지 않고 어디서나 연결되는 시스템의 시간대에 있습니다.이것은 중요 서버 응용 프로그램을 위해,그러나 더 적은 그렇게 데스크탑/모바일 앱입니다.

  • 이 있는 경우 다른 작업의를 사용하여 IANA 시간 영역,또는 당신이 사용하는 경우.NET 표준 빌드의 Noda 시간를 변경한 다음,2 단계를 사용하여 Tzdb 공급자:

    DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
    

    이 TZDB 지역은 훨씬 더 많은 정확한 보다 BCL 영역이 있습니다.Noda 것입니다 시간이 지도하시스템의 창(BCL)시간대에는 IANA(TZDB)시간 영역에서 이러한 초기 호출합니다.

이 있는 경우 호기심으로 이유 DateTime.Now 은 그렇게 컴팩트하는 동안 노다 시간은 그렇게 자세한 정보려고,decompiling DateTime.Now 나 보 MS reference sources.당신이 볼 수는 그것의 일을 기본적으로 동일한 단계를 수행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top