저는 writing a managed wrapper around Massachusetts Bay Transportation Authority (MBTA) Realtime API으로 일하고 있습니다. 그들은 유닉스 타임 스탬프 (epoch) 인 서버 시간을 반환하는 API를 가지고있다. 내가 그것을 구현하고있는 아래 도서관은 내가 BCL 시간대에 대한 지원을 제한 의미 PCL Profile 78
, 그래서 나는 DateTime
로 America/New_York
을 동부 시간으로 서버에서 반환 시간을 변환하려고 Nodatime
에보크 타임 스탬프를 동부 표준시로 변환하고 노다 티 메을 사용하여 반전하는 우아한 방법
을 사용하는 의지 개체 및 반대로 방법. My current code is very dirty
public static class TimeUtils
{
static readonly DateTimeZone mbtaTimeZone = DateTimeZoneProviders.Tzdb["America/New_York"];
static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static DateTime GetMbtaDateTime (long unixTimestamp)
{
var mbtaEpochTime = epoch.AddSeconds (unixTimestamp);
var instant = Instant.FromUtc (mbtaEpochTime.Year, mbtaEpochTime.Month,
mbtaEpochTime.Day, mbtaEpochTime.Hour, mbtaEpochTime.Minute, mbtaEpochTime.Second);
var nodaTime = instant.InZone (mbtaTimeZone);
return nodaTime.ToDateTimeUnspecified();
}
public static long MbtaDateTimeToUnixTimestamp (DateTime time)
{
TimeSpan secondsSinceEpochMbtaTz = time - epoch;
var instant = Instant.FromUtc (time.Year, time.Month, time.Day, time.Hour, time.Minute, time.Second);
var mbtaTzSpan = mbtaTimeZone.GetUtcOffset (instant).ToTimeSpan();
var epochDiff = secondsSinceEpochMbtaTz - mbtaTzSpan;
return (long)epochDiff.TotalSeconds;
}
}
간단히 작성하는 다른 방법이 있습니까? Nodatime이 신기원 시간을 America/New_York
DateTime으로 변환하고 America/New_York
신시대 시간을 지원해야한다고 희망합니다. 당신이 정말로가 이있는 경우에만 DateTime
에 의존 - 내 방법 MbtaDateTimeToUnixTimestamp
는 의견에 언급 한 바와 같이, 당신의 코드를 통해 노다 시간 유형을 사용하는 것이 가장 좋은 것입니다, 잔인한 해킹을 먼저
정말'DateTime'을 사용해야합니까? Noda Time은 코드 전체에서 사용할 때 가장 잘 작동합니다. –