我目前正在努力确保我们的传统后端可以根据用户的当前时区(或更具体地说是偏移量)支持解析日期时间.我们的服务器处于东部标准时间,我们的大部分日期时间都来自那里.但是,对于位于其他时区的用户,在检索这些日期时间时需要转换到其时区(或者,在这种情况下为偏移).此外,来自用户的日期时间必须在服务器上持久化之前转换为东部标准时间.鉴于我们正在开发的前端是基于Web的,我能够在几分钟内检索用户的偏移量,并将该值传递到标题内的服务层.我看了Noda Time并认为它是一个很棒的API.它确实迫使我在更精致的事情中思考时间,但我仍然不能100%确定我已正确使用它.以下是我为上述转换编写的方法.我测试了它们,它们似乎有效.鉴于上述情况,这看起来是否正确使用了库?我是否正确考虑约会时间?
public static DateTime ConvertToUtcFromEasternTimeZone(DateTime easternDateTime)
{
NodaTime.DateTimeZone easternTimeZone = NodaTime.DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York");
ZoneLocalMappingResolver customResolver = Resolvers.CreateMappingResolver(Resolvers.ReturnLater, Resolvers.ReturnStartOfIntervalAfter);
var easternLocalDateTime = LocalDateTime.FromDateTime(easternDateTime);
var easternZonedDateTime = easternTimeZone.ResolveLocal(easternLocalDateTime, customResolver);
return easternZonedDateTime.ToDateTimeUtc();
}
public static DateTime ConvertToEasternTimeZoneFromUtc(DateTime utcDateTime)
{
NodaTime.DateTimeZone easternTimeZone = NodaTime.DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York");
NodaTime.DateTimeZone utcTimeZone = NodaTime.DateTimeZoneProviders.Tzdb.GetZoneOrNull("UTC");
ZoneLocalMappingResolver customResolver = Resolvers.CreateMappingResolver(Resolvers.ReturnLater, Resolvers.ReturnStartOfIntervalAfter);
var utcLocal = LocalDateTime.FromDateTime(utcDateTime);
var utcZonedDateTime = utcTimeZone.ResolveLocal(utcLocal, customResolver);
var easternZonedDateTime = utcZonedDateTime.ToInstant().InZone(easternTimeZone);
return easternZonedDateTime.ToDateTimeUnspecified();
}
public static DateTime ConvertToUtc(DateTime dateTime, int offsetInMinutes)
{
LocalDateTime localDateTime = LocalDateTime.FromDateTime(dateTime);
var convertedDateTime = localDateTime.PlusMinutes(offsetInMinutes).ToDateTimeUnspecified(); …Run Code Online (Sandbox Code Playgroud) 我正在使用这个:
string url = string.Format("https://maps.googleapis.com/maps/api/timezone/json?location={0},{1}×tamp=1374868635&sensor=false", lat, lon);
using (HttpClient cl = new HttpClient())
{
string json = await cl.GetStringAsync(url).ConfigureAwait(false);
TimeZoneModel timezone = new JavaScriptSerializer().Deserialize<TimeZoneModel>(json);
}
Run Code Online (Sandbox Code Playgroud)
获取用户时区.这很好用.我想转换这个:
"timeZoneName" : "Central European Summer Time"
Run Code Online (Sandbox Code Playgroud)
到.net时区?
在.net时区中,时区不存在.
我试图获得适当的时区:
TimeZoneInfo tzf = TimeZoneInfo.FindSystemTimeZoneById("Central European Summer Time");
Run Code Online (Sandbox Code Playgroud)
知道如何将谷歌时区转换为.net时区吗?那可能吗 ?
提前谢谢你们!