Включая конечные нули при форматировании NodaTime Instant? - PullRequest
2 голосов
/ 24 марта 2020

Использование 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

Вы можете увидеть это здесь

Есть ли в любом случае я мог бы получите следующие выходные данные, предпочтительно используя встроенный метод:

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

В основном, сохраните конечные нули.

1 Ответ

3 голосов
/ 24 марта 2020

Вы можете обратиться к этой странице для определения шаблона. F приведет к удалению незначительных конечных цифр. 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));
}
...