标签: nodatime

NodaTime中时区的长表名称

在NodaTime中,如果给出tz时区id,你如何找到时区的长格式名称?

例如,如果我提供"America/Los_Angeles",我应该回到"太平洋标准时间".

c# datetime nodatime

6
推荐指数
1
解决办法
1918
查看次数

使用JSON.NET和NodaTime从JSON反序列化LocalTime导致NodaTime.Text.UnparsableValueException

我有一个问题将时间值反序列化为LocalTime-授予,我对NodaTime很新.我想导入一个Web服务结果,该结果以"HH:mm"格式列出时间.除非我以"hh:mm:ss.fff"格式使用时间,否则我会收到异常.有没有办法指定不同的模式并让"HH:mm"起作用?

请参阅此代码

using System;
using System.Collections.Generic;

using Newtonsoft.Json;
using NodaTime;
using NodaTime.Serialization.JsonNet;
using NodaTime.Text;    // Required for LocalTimePattern
namespace TestNodaTime
{
    class MyObject
    {
        [JsonProperty("var1")]
        public int MyProperty { get; set; }

        [JsonProperty("time")]
        public LocalTime MyTime { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string serializedObject1 = "[{\"var1\":\"42\",\"time\":\"01:02:03.004\"}]";
            string serializedObject2 = "[{\"var1\":\"42\",\"time\":\"01:02\"}]";

            JsonSerializerSettings jss = new JsonSerializerSettings();
            jss.ConfigureForNodaTime(DateTimeZoneProviders.Bcl);

            // This works - the pattern is "hh:mm:ss.fff"
            MyObject mo1 = JsonConvert.DeserializeObject<List<MyObject>>(serializedObject1, jss)[0];

            // This causes an …
Run Code Online (Sandbox Code Playgroud)

c# json json.net deserialization nodatime

6
推荐指数
1
解决办法
762
查看次数

你如何在PropertyGrid中使用NodaTime类?

我正在转换一些应用程序代码以使用NodaTime类而不是System.DateTime.我的应用程序的一部分使用PropertyGrid控件允许用户编辑包含LocalDate和Instant的类.在不更改任何内容的情况下,PropertyGrid可以显示属性,但它们不再可编辑.允许用户编辑这些字段的最佳方法是什么.

为了便于说明,我们可以使用此类作为我想要显示和编辑的事物类型的代表:

public class User
{
    public string Name { get; set; }
    public LocalDate BirthDate { get; set; }
    public Instant NextAppointment { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

.net c# propertygrid nodatime

5
推荐指数
1
解决办法
269
查看次数

有没有办法在野田时间表示部分日期?

我试图用 C# 表示公司的成立日期。我偶尔会有一整天、一月和一年的时间,但更多时候我只有一个月和一年,或者有时只有一年。

有没有一种方法可以在 NodaTime 中表示这一点,以便还允许它们之间的比较?即2012 < June 2013 == true,但2013 < June 2013 == false因为它是同一年。

我还需要能够明确检索存储的数据。我明确的意思是我不能存储2013as1/1/2013因为我无法检索我只知道日期的信息2013

c# precision date nodatime

5
推荐指数
1
解决办法
242
查看次数

通过WebAPI正确序列化LocalTime

我无法通过WebAPI对NodaTime的LocalTime进行序列化和反序列化.

类定义

public class ExampleClass
{
    public LocalTime ExampleLocalTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

尝试序列化输出

// create example object
var exampleclass = new ExampleClass() 
{ 
    ExampleLocalTime = new LocalTime(DateTime.Now.Hour, DateTime.Now.Minute) 
};
// serialise output
var jsonsettings = new JsonSerializerSettings()
{
    DateParseHandling = DateParseHandling.None,
    NullValueHandling = NullValueHandling.Ignore
};
jsonsettings.Converters.Add(new IsoDateTimeConverter());
string exampleoutput = JsonConvert.SerializeObject(exampleclass, Formatting.Indented, jsonsettings);
Run Code Online (Sandbox Code Playgroud)

我希望格式化为ISO格式的时间格式,例如12:34:53,而是将其解串行化为以下,本地时间表示为刻度;

{"ExampleLocalTime":{"ticks":553800000000}}

在反序列化和序列化时,我需要添加什么来避免Ticks

c# json.net asp.net-web-api nodatime

5
推荐指数
1
解决办法
533
查看次数

使用Nodatime将DateTime从特定时区转换为UTC?

好的,我有一个托管在中央标准时区的Web服务器.IIS服务器配置为时区,因此每当在服务器上使用DateTime.Now或创建类型为Local的新DateTime时,它都处于中央时间.

问题是该网站是(国际)国内申请,我可以在美国或加拿大的任何地方拥有客户.该网站拥有的一个东西是用于安排约会的"调度程序".我们决定易于开发,以UTC格式将所有DateTime值存储在数据库中,并且所有流入和流出API的流量也都是UTC.问题是当我在服务器端创建日期/时间值时,我经常遇到问题.

比方说,我需要以编程方式为服务器上太平洋标准时区的客户端创建约会,时间为上午8点.在过去,我做过这样的事情:

var appointment = new new DateTime(2015, 04, 17, 08, 00, 00, DateTimeKind.Unspecified)
var utcAppointment = TimeZoneInfo.ConvertTimeToUtc(appointment,
                        TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"))
Run Code Online (Sandbox Code Playgroud)

我在我的程序中做了很多其他的日期/时间操作,我想要去Nodatime而不是.我知道我可以很容易地从Nodatime变量中获取UTC DateTime.我感到困惑的是如何在特定日期/时间为特定时区创建Nodatime变量?我看到的所有例子都与模式和阅读字符串或创建一个基本上是"现在"的Instant有关.我想做一些事情,比如使用现有的BCL DateTime对象,无论"Kind"如何,并将其转换为具有我设置的特定时区的Nodatime对象.

我认为Nodatime是一个很棒的图书馆,但阅读用户指南只会让我对转换进出BCL感到头疼.

c# datetime nodatime

5
推荐指数
1
解决办法
3031
查看次数

使用 NodaTime 将特定国家/地区日期时间转换为 UTC

我想通过提供国家/地区代码,使用 NodaTime 将特定日期时间值转换为 UTC。

例如,国家是土耳其,国家代码是 TR,具体日期时间是“2016 年 2 月 5 日 7:45 PM”,那么可能是“2016 年 2 月 5 日 5:45 PM”吗?

另外我的窗户位置不是土耳其。

先感谢您?

c# nodatime

5
推荐指数
1
解决办法
2544
查看次数

NodaTime中的偏移时间

我正在寻找OffsetTimeNodaTime的某种支持,但我没有看到任何东西.我正在以"17:13:00 + 10:00"等格式接收数据.我将此视为时间偏移,将其应用于给定日期(用户可以控制)到达当地时间以进行显示.

我能想出的最好的是:

// the date for this OffsetDateTime will be 1/1/2000
var parsed = OffsetDateTimePattern.CreateWithInvariantCulture("HH:mm:sso<G>").Parse(input).Value;

var desiredLocalDate = new LocalDate(2017, 06, 13);
var adjusted = new OffsetDateTime(
    new LocalDateTime(desiredLocalDate.Year, desiredLocalDate.Month, desiredLocalDate.Day, parsed.Hour, parsed.Minute, parsed.Second, parsed.Millisecond),
    parsed.Offset);
var localTime = adjusted.LocalDateTime;
Run Code Online (Sandbox Code Playgroud)

我想我想知道我是否忽略了更好的方法来做到这一点.

.net c# nodatime

5
推荐指数
1
解决办法
304
查看次数

如何使用 NodaTime 过滤已弃用的时区?

我想将活动(未弃用)时区 ID 列表返回给用户。使用TzdbDateTimeZoneSource.Default.ZoneLocations.ToList()我可以列出所有时区,但我没有找到如何过滤掉不推荐使用的区域。在最坏的情况下,我可以基于https://en.wikipedia.org/wiki/List_of_tz_database_time_zones建立我自己的列表,但会更高兴从 NodaTime 生成列表。

c# timezone nodatime

5
推荐指数
0
解决办法
367
查看次数

如何获取 NodaTime 中的时区列表

如何从 NodaTime 获取“时区”列表,以便我可以制作如下所示的 UI 供用户选择?

我想显示 UTC 偏移量,然后显示相应的城市/国家/地点。它不需要与下面的完全一样,但你知道,很接近。

DateTimeZone没有 name 属性,并且ing 会产生重复项(来自fromToString()的列表)。IdsIDateTimeZoneProvider

我看到你可以从〜国家到地区,但这TzdbDateTimeZoneSource.Default.ZoneLocations也不是我正在寻找的。我可以看到如何将这两个数据源拼凑在一起,但这感觉像是一个已解决的问题,我不应该重新发明。

示例列表

.net timezone localization nodatime

5
推荐指数
2
解决办法
3127
查看次数