格式化NodaTime瞬间时是否包含尾随零?

问题描述 投票:1回答:1

使用NodaTime 2.4.x

[如果我创建一个Instant并在瞬间开始爆炸,然后尝试使用包含毫秒/纳秒的Pattern对其进行格式化,则尾随的零将被切除。

例如

using System;
using NodaTime;
using NodaTime.Text;

public class Program
{
    private static readonly InstantPattern _instantPattern 
            = InstantPattern.CreateWithInvariantCulture("uuuu'-'MM'-'dd'T'HH':'mm':'ss;FFFFFF'Z'");

    public static void Main()
    {
        var instantRound = Instant.FromUnixTimeMilliseconds(158507100000);
        var instantNotRound = Instant.FromUnixTimeMilliseconds(158507100001);
        Console.WriteLine(_instantPattern.Format(instantRound));
        Console.WriteLine(_instantPattern.Format(instantNotRound));
    }
}

输出

1975-01-09T13:45:00Z
1975-01-09T13:45:00.001Z

You can see this here

无论如何,我可以得到以下输出,最好使用内置方法:

1975-01-09T13:45:00.000000Z
1975-01-09T13:45:00.001000Z

基本上,保持尾随零。

c# .net nodatime
1个回答
3
投票

关于模式说明符,您可以参考this pageF将导致删除无关紧要的尾随数字。 f不会。

您还使用了错误的方法名称。应该是FromMillisecondsSinceUnixEpoch,而不是FromUnixTimeMilliseconds

private static readonly InstantPattern _instantPattern 
        = InstantPattern.CreateWithInvariantCulture("uuuu'-'MM'-'dd'T'HH':'mm':'ss;ffff'Z'");

public static void Main()
{
    var instantRound = Instant.FromMillisecondsSinceUnixEpoch(158507100000);
    var instantNotRound = Instant. FromMillisecondsSinceUnixEpoch(158507100001);
    Console.WriteLine(_instantPattern.Format(instantRound));
    Console.WriteLine(_instantPattern.Format(instantNotRound));
}
© www.soinside.com 2019 - 2024. All rights reserved.