我们想在我们的网站上将Windows时区转换为OLSON时区.但是,OLSON时区的问题在于它们使用大陆来命名而不是国家名称,例如:
America/New_York
Asia/Kolkata
...
Run Code Online (Sandbox Code Playgroud)
我不认为我们的任何客户都希望他/她必须输入一个大陆名称才能找到一个正确的时区 - 并且时区列表比Windows中使用的要大得多 - 几乎一千个.例如,即使客户发现他必须输入大陆名称,Asia他也必须在数百个时区搜索所有亚洲国家.从可用性的角度来看,这是非常糟糕的.
是否有任何数据库可以将OLSON/IANA时区名称映射到乡村风格的名称,例如:
America/New_York -> New York, USA
Asia/Kolkata -> Kolkata, India
Run Code Online (Sandbox Code Playgroud) 我不能为我的生活反序列化一个日期字符串,我被告知是ISO 8601(例如'1396949418557')到C#DateTime对象.
我真的很喜欢我读过的Noda Time,我正在使用JSON.NET.有人遇到过这个吗?
我在尝试将字符串解析为 NodaTime LocalDate 时遇到问题。我的代码如下所示:
var value = "Monday, May 26, 2014";
var pattern = LocalDatePattern.CreateWithInvariantCulture("d");
var parseResult = pattern.Parse(value);
var localDate = parseResult.GetValueOrThrow();
Run Code Online (Sandbox Code Playgroud)
这总是导致 UnparsableValueException:
附加信息:值字符串与格式字符串“MM”中所需的数字不匹配。
据我所知,我的值应该符合标准模式(当我查看模式的示例模板值时,它看起来与我试图解析的值非常相似)。我在这里缺少什么?
编辑
我将代码更改为以下内容,但仍然收到类似的错误:
var value = "Monday, May 26, 2014";
var pattern = LocalDatePattern.CreateWithInvariantCulture("dddd, dd MMMM, yyyy");
var parseResult = pattern.Parse(value);
var localDate = parseResult.GetValueOrThrow();
Run Code Online (Sandbox Code Playgroud)
导致另一个 UnparsableValueException:
附加信息:值字符串与格式字符串“dd”中所需的数字不匹配。
我有ZonedDateTime值.我需要获得相应的UTC时间并将其格式化为ISO8601字符串(不带时区).这样做的"NodaTime方式"是什么?
据我所知,我可以使用ZonedDateTime.ToDateTimeUtc()方法来获取.Net DateTime类型的Utc.我应该这样做,然后才使用ToString()?
喜欢
var myresult = resZonedDateTime.ToDateTimeUtc().ToString("s")
Run Code Online (Sandbox Code Playgroud)
我真的应该在那里使用"s"吗?
我正在编写围绕马萨诸塞州海湾运输管理局(MBTA)实时API的托管包装器.它们有一个API,它返回服务器时间,即unix时间戳(epoch).我正在实现它的库是PCL Profile 78,这意味着我对BCL TimeZone的支持有限,所以我求助于使用Nodatime
我试图将从服务器返回的时间转换为东部时间,这是America/New_York一个DateTime对象和反向方式.我目前的代码很脏
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 …Run Code Online (Sandbox Code Playgroud) 我正在使用最新的 ServiceStack 并希望使用 NodaTime 而不是 .NET DateTime 类。我读过的建议显示使用基于 IClock 的属性,我已经完成了。现在我需要注入 IClock,但是我尝试的方法不起作用。我试过:
container.RegisterAutoWiredAs<SystemClock, IClock>();
Run Code Online (Sandbox Code Playgroud)
但我收到异常“未找到 Type'SystemClock' 的构造函数。
我也试过
container.RegisterAutoWired<Instant>();
Run Code Online (Sandbox Code Playgroud)
它编译,但不注入 IClock。
欢迎任何建议。
使用nodatime如何在ZonedDateTime时区中找到两个ZonedDateTime对象之间的区别.
编辑 - 示例:
例如,我在时区中有两个日期,让我们使用"欧洲/斯德哥尔摩"时间.
这些是在服务器上计算的,该服务器的本地时间设置为"America/Los_Angeles".
我希望在"欧洲/斯德哥尔摩"时区中获得两个时段之间的毫秒数,同时忽略服务器的本地时间.这是因为如果部署到不同的服务器,服务器本地时间可能会更改,如果发生这种情况,我不希望更新代码.
我正在尝试将Windows转换为IANA时区,以下是大部分时间都可以使用的代码.但是当windows time id ="Turks&Caicos"时,下面的代码返回NULL.我正在使用NODATIME版本1.3.1
Public Function ConvertID_WindowsToIana(strWindowsZoneID As String) As String
If strWindowsZoneID.Equals("UTC", StringComparison.OrdinalIgnoreCase) Then
Return "Etc/UTC"
End If
Dim tzdbSource = NodaTime.TimeZones.TzdbDateTimeZoneSource.[Default]
Dim tzi = TimeZoneInfo.MapTimeZoneId(strWindowsZoneID)
Return tzdbSource.CanonicalIdMap(tzi)
End Function
Run Code Online (Sandbox Code Playgroud)
这里当tzi = -4:00 Turks&Caicos时,在这种情况下返回为NULL.
现在,当我更新到2.2.3版本时,认为它将修复这些内容,但根据文档
现在该函数将"当前字符串的位置"作为参数.
所以我的代码如下所示:
Public Function ConvertID_WindowsToIana(strWindowsZoneID As String) As String
Dim tzi = TimeZoneInfo.FindSystemTimeZoneById(strWindowsZoneID)
Dim tzid = tzdbSource.GetSystemDefaultId(WHAT TO PUT HERE)
// some logic
End Function
Run Code Online (Sandbox Code Playgroud)
问题1:为什么我的第一个代码不适用于"特克斯和凯科斯群岛".
问题2:我更新了认为它将解决这个问题,但现在该功能已经消失并被替换,我不知道该使用什么.请帮我.
PS:对于Eastern和许多其他时区,First Code Snippet工作正常.
我有这些输入字符串:
var timeStr = "03:22";
var dateStr = "2018/01/12";
var format = "yyyy/MM/dd";
var timeZone = "Asia/Tehran";
Run Code Online (Sandbox Code Playgroud)
这是我所拥有的时间的信息,timeStr它在Asia/Tehran时区中并且不在UTC中.
使用NodaTime,我如何获得一个DateTimeOffset对象,其中包含正确的偏移信息?
我正在使用Noda Time在Xamarin Forms中获取设备上的本地时区.我们使用下面的代码返回它.
NodaTime.DateTimeZoneProviders.Tzdb.GetSystemDefault().Id;
Run Code Online (Sandbox Code Playgroud)
但是,如果您将手机的位置设置为美国西海岸的任何地方,则会返回"America/Tijuana".这对我们造成了一个问题,当你的位置设置为LA时,如果它返回类似"America/Los_Angeles"(这是一个有效的Id)的东西就可以解决
有什么想法吗?如何让库返回更准确的ID?