标签: nodatime

让 NodaTime.Serialization.JsonNet 使用自定义日期格式

我正在尝试反序列化 JSON,其中包含格式为 的日期2017-10-26 13:32:11 Etc/GMT当与Json.NETNodaTime.Serialization.JsonNet结合使用时, NodaTime似乎支持这一点。我在 StackOverflow 上找到了一些信息,这些信息使我仅使用 NodaTime 就能完成这项工作:

var date = "2017-10-26 13:32:11 Etc/GMT";

var pattern = ZonedDateTimePattern.CreateWithInvariantCulture(
    "yyyy'-'MM'-'dd HH':'mm':'ss z", 
    DateTimeZoneProviders.Tzdb
);

var result = pattern.Parse(date);
Run Code Online (Sandbox Code Playgroud)

但是,当将此示例扩展为使用其他两个包反序列化 JSON 时,我无法让它工作。通过阅读文档和其他资源,我相信这应该有效:

public class DateObj
{
    public ZonedDateTime Date { get; set; }
}

void Main()
{
    var date = "2017-10-26 13:32:11 Etc/GMT";
    var json = $"{{\"Date\": \"{date}\"}}";

    var pattern = ZonedDateTimePattern.CreateWithInvariantCulture(
        "yyyy-MM-dd HH:mm:ss z",
        DateTimeZoneProviders.Serialization
    );

    var settings = new JsonSerializerSettings();
    settings.ConfigureForNodaTime(pattern.ZoneProvider);
    var …
Run Code Online (Sandbox Code Playgroud)

c# json json.net deserialization nodatime

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

使用 NodaTime LocalDate 调用 Web api POST (abp appservice) 无法序列化

我正在尝试使用abp.io编写一个 Web api并实现NodaTime。每当我尝试调用 POST 操作时,我都会得到

验证期间检测到以下错误。\r\n - JSON 值无法转换为 NodaTime.LocalDate。

我已经在模块中正确配置了 NodaTime,我还在传统的 .net 5 Web api 中对其进行了测试,并且工作正常。

这是我的配置:

private void ConfigureNodaSerialization()
    {
        Configure<JsonSerializer>(options =>
        {
            options.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
            //options.Converters.Add(NodaConverters.LocalDateConverter);
        });
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用 NodaTime.Serialization.JsonNet

我也尝试过 NodaTime.Serialization.SystemTextJson 无济于事,结果相同。

..这是应用程序服务:

[AllowAnonymous]
public class NodaTestAppService : TestAppService, INodaTestAppService
{
    public Task PostNodaTest([FromBody]NodaTestDto dto)
    {
        return Task.CompletedTask;
    }

    public Task GetNodaTest(NodaTestDto dto)
    {
        return Task.CompletedTask;
    }
}
Run Code Online (Sandbox Code Playgroud)

GET 工作正常,问题出在 POST 上。

这是 dto:

public class NodaTestDto
{
    public LocalDate Date { get; set; } …
Run Code Online (Sandbox Code Playgroud)

.net c# nodatime abp webapi

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

如何使用NodaTime将IANA区域+日期时间转换为UTC +偏移量

我有当地时间的字符串格式:"yyyy-MM-dd HH:mm:ss"和当时的IANA时区(例如"欧洲/伦敦").

如何在C#中将其转换为UTC + TimeZone Offset字符串,可能使用NodaTime

例如"yyyy-MM-dd HH:mm:ss + 01:00"?

我甚至不知道从哪里开始!

这是我得到的(恐怕我是C sharp的新手):我知道我需要将它转换为瞬间,但是无法掌握库.

string dateTime = "2014-12-31 12:30:00";
string IANA = "Europe/London";
Instant instDateTime = NodaTime.Instant.FromDateTimeUtc(Convert.ToDateTime(dateTime));
string outputUTC = string.Format("yyyy-MM-dd HH:mm:ssZ", instDateTime);
Run Code Online (Sandbox Code Playgroud)

感谢Matt(见下面的答案),我现在拥有了我需要的功能(请注意,我最终需要的是UTC而不是日期时间+偏移量):

有点令人担忧的是,欧洲/莫斯科是UTC + 04:00,而实际上是2014年10月26日以来的UTC + 03:00.

    static void Main(string[] args)
    {
        string dateTime = "2014-12-31T12:30:00";
        string timeZone = "Europe/Moscow";

        Console.WriteLine(timeZone + " Local time '" + dateTime + "' to Zulu time");
        Console.WriteLine(ConvertIANALocalTimeToZulu(timeZone, dateTime));
        Console.WriteLine();
        Console.WriteLine("Zulu time '" + dateTime + "' to " + timeZone + " …
Run Code Online (Sandbox Code Playgroud)

c# datetime utc iana nodatime

0
推荐指数
1
解决办法
1584
查看次数

nodatime时间之间的总分钟数

我已经在C#中使用了NodaTime了很多,这很棒,但是在试图获取两个LocalDateTimes之间的总分钟数时却陷入困境。我的两次相隔一个多星期。

这不会产生有效的结果:(1)

long Mns = Period.Between(nowLdt,triggerLdt).Ticks.ToSeconds() / 60; 
Run Code Online (Sandbox Code Playgroud)

这确实提供了正确的结果:(2)

double Mns = Period.Between(nowLdt,triggerLdt).ToDuration().ToTimeSpan().TotalMinutes;
Run Code Online (Sandbox Code Playgroud)

所以我的问题确实是3个问题:

为什么NodaTime没有TotalMinutes函数?

为什么上述(1)无效?

是否有比(2)更加干净的方法?

c# nodatime

0
推荐指数
1
解决办法
469
查看次数

如何在 asp.net core 3.1 中设置 nodatime json 序列化程序

我试图弄清楚如何在 ASP.NET Core 3.1 Web Api 项目中设置 NodaTime JSON 序列化。这里描述的方式对我不起作用

services.AddJsonFormatters(settings => settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb));
Run Code Online (Sandbox Code Playgroud)

因为没有像AddJsonFormatterson这样的方法services : IServiceCollection
安装的软件包:

NodaTime v 3.0.3  
NodaTime.Serialization.JsonNet v 3.0.0
Microsoft.AspNetCore.Mvc.NewtonsoftJson v 3.1.9
Newtonsoft.Json v 12.0.3
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个问题吗?我应该在 Startup.cs 中使用什么方法来配置 NodaTime?

c# nodatime asp.net-core-3.1

0
推荐指数
1
解决办法
397
查看次数

标签 统计

c# ×5

nodatime ×5

.net ×1

abp ×1

asp.net-core-3.1 ×1

datetime ×1

deserialization ×1

iana ×1

json ×1

json.net ×1

utc ×1

webapi ×1