标签: nodatime

更好的OLSON/IANA时区名称

我们想在我们的网站上将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)

time timezone nodatime

2
推荐指数
1
解决办法
1848
查看次数

Noda Time(C#)Magic解析JSON(假设ISO 8601)日期.例如1396949418557

我不能为我的生活反序列化一个日期字符串,我被告知是ISO 8601(例如'1396949418557')到C#DateTime对象.

我真的很喜欢我读过的Noda Time,我正在使用JSON.NET.有人遇到过这个吗?

c# nodatime

2
推荐指数
1
解决办法
555
查看次数

从标准模式解析 NodaTime LocalDate 的问题

我在尝试将字符串解析为 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”中所需的数字不匹配。

c# nodatime

2
推荐指数
1
解决办法
3980
查看次数

获取和格式化与NodaTime ZonedDateTime值对应的UTC时间?

我有ZonedDateTime值.我需要获得相应的UTC时间并将其格式化为ISO8601字符串(不带时区).这样做的"NodaTime方式"是什么?

据我所知,我可以使用ZonedDateTime.ToDateTimeUtc()方法来获取.Net DateTime类型的Utc.我应该这样做,然后才使用ToString()

喜欢

var myresult = resZonedDateTime.ToDateTimeUtc().ToString("s")  
Run Code Online (Sandbox Code Playgroud)

我真的应该在那里使用"s"吗?

c# utc nodatime

2
推荐指数
1
解决办法
2721
查看次数

优雅的方式将纪元时间戳转换为东部时间并使用Nodatime进行反向

我正在编写围绕马萨诸塞州海湾运输管理局(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)

c# timezone datetime portable-class-library nodatime

2
推荐指数
1
解决办法
1220
查看次数

如何在 ServiceStack 中注册 NodaTime?

我正在使用最新的 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。

欢迎任何建议。

c# servicestack funq nodatime

2
推荐指数
1
解决办法
322
查看次数

使用nodatime如何找到两个ZonedDateTime对象之间的差异

使用nodatime如何在ZonedDateTime时区中找到两个ZonedDateTime对象之间的区别.

编辑 - 示例:

例如,我在时区中有两个日期,让我们使用"欧洲/斯德哥尔摩"时间.

这些是在服务器上计算的,该服务器的本地时间设置为"America/Los_Angeles".

我希望在"欧洲/斯德哥尔摩"时区中获得两个时段之间的毫秒数,同时忽略服务器的本地时间.这是因为如果部署到不同的服务器,服务器本地时间可能会更改,如果发生这种情况,我不希望更新代码.

c# timezone datetime nodatime

2
推荐指数
1
解决办法
1027
查看次数

与IDateTimeZoneSource.MapTimeZoneId的Noda时区问题

我正在尝试将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工作正常.

c# vb.net timezone nodatime

2
推荐指数
1
解决办法
173
查看次数

如何获取具有本地时间信息的DateTimeOffset

我有这些输入字符串:

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对象,其中包含正确的偏移信息?

c# nodatime

2
推荐指数
1
解决办法
870
查看次数

我怎样才能让Xamarin的Noda Time回归"America/Los_Angeles"?

我正在使用Noda Time在Xamarin Forms中获取设备上的本地时区.我们使用下面的代码返回它.

NodaTime.DateTimeZoneProviders.Tzdb.GetSystemDefault().Id;
Run Code Online (Sandbox Code Playgroud)

但是,如果您将手机的位置设置为美国西海岸的任何地方,则会返回"America/Tijuana".这对我们造成了一个问题,当你的位置设置为LA时,如果它返回类似"America/Los_Angeles"(这是一个有效的Id)的东西就可以解决

有什么想法吗?如何让库返回更准确的ID?

c# timezone nodatime xamarin

2
推荐指数
1
解决办法
239
查看次数