문제

안녕

UTC의 DateTime을 나타내는 정수가 포함 된 필드가있는 레거시 데이터베이스가 있습니다.

문서에서 : "CDR 내에서 타임 스탬프는 UTC (Universal Coordinated Time)로 나타납니다.이 값은 일광 절약 시간 절약 시간 변경과 독립적입니다."

값의 예는 1236772829입니다.

내 질문은 UTC 값과 로컬 타임 값으로 .net dateTime (DB가 아닌 CLR 코드)으로 변환하는 가장 좋은 방법입니다.

Google을 시도했지만 운이 없습니다.

미리 감사합니다 /Johan

도움이 되었습니까?

해결책

그 정확한 문구를 인터넷 검색하면 나에게 제공됩니다 이 cicso 페이지, "필드는 운영 체제에서 얻은 Time_t 값을 지정합니다"라고 말합니다.

Time_T 엄밀히 말하면 특정 구현이 필요하지 않은 C 라이브러리 개념이지만 일반적으로 Unix-Y 시스템의 경우 1970 년 1 월 1 일 00:00 인 Unix Epoch가 시작된 이후 몇 초가 될 것입니다.

이것이 옳다고 가정하면,이 코드는 int에서 dateTime을 제공합니다.

        DateTime epochStart = new DateTime(1970, 1, 1);

        int cdrTimestamp = 1236772829;

        DateTime result = epochStart.AddSeconds(cdrTimestamp);

        // Now result is 2009 March 11 12:00:29

당신은 이것이 당신이 이것들에 대한 올바른 해석인지 확인하기 위해 얻은 결과를 확인해야합니다. time_t에스.

다른 팁

정수가 실제로 무엇을 의미하는지 알아야합니다. 이것은 일반적으로 다음으로 구성됩니다.

  • 에포크/오프셋 (예 : 0의 의미) - 예를 들어 "1970 년 1 월 1 일 자정"
  • 스케일, 예를 들어 초, 밀리 초, 진드기.

두 가지 값과 UTC 측면에서 의미하는 바를 얻을 수 있다면 나머지는 쉬워야합니다. 가장 간단한 방법은 아마도 DateTime (또는 DateTimeOffset) 에포크로서 a TimeSpan 정수에서 예를 들어 TimeSpan.FromMilliseconds 등을 함께 추가하면 끝났습니다. 편집 : 사용 AddSeconds 또는 AddMilliseconds 에 따라 Aakashm의 대답 이 비트를하는 더 간단한 방법입니다 :)

또는 산술을 직접하고 전화하십시오 DateTime 많은 진드기를 취하는 생성자. (아마도 버전은 a DateTimeKind 또한 더 나을 것이므로 UTC라고 명시 적으로 진술 할 수 있습니다.)

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