如何确保NodaTime对象始终被“字符串化”为ISO格式?

康妮·舍格伦

当我们使用NodaTime对象时,获取错误的格式有点容易。例如,我们使用字符串插值来构造uri,但我们确实想要yyyy-MM-dd格式。日志记录也是如此,我们真的不需要任何其他格式。

LocalDate date = new LocalDate(2020, 8, 10);
string toString = $"{date}"; // "den 10 augusti 2020"
logger.LogInformation("Date: {Date}", date); // "Date: Monday, 10 August 2020"

ToString的文档(用于上面的第二行)指出:
“当前实例的值采用默认格式模式(“ D”),使用当前线程的区域性来获取格式提供程序。

如果我将当前区域性更改为InvariantCulture,则现在使上述两行均显示为“ 2020年8月10日,星期一”,这会更好,因为它们是一致的,但yyyy-MM-dd格式都不是。

System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

不过,理想情况下,我只想自定义NodaTime对象如何“字符串化”,以避免改变文化的任何其他不良影响。到这里有帮助吗?

编辑:

我制作了一个控制台应用程序,以尽量减少重复性的示例

Console.WriteLine(new LocalDate(2020,8,13));
Console.WriteLine(ZonedDateTime.FromDateTimeOffset(DateTimeOffset.Now));
Console.WriteLine(DateTime.Now);
Console.WriteLine(DateTimeOffset.Now);

并得到以下输出:

den 13 augusti 2020
2020-08-13T08:39:16 UTC+02 (+02)
2020-08-13 08:39:16
2020-08-13 08:39:16 +02:00

我希望LocalDate的默认输出为2020-08-13,它在日志以及字符串插值中更有用,例如: var uri = $"api/orders?date={localDate}"

乔恩·斯基特

实现此目的的最简单方法是使用CultureInfo默认为ISO-8601格式的。从不变文化开始,创建它相当容易:

using NodaTime;
using System;
using System.Globalization;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        var isoCulture = (CultureInfo) CultureInfo.InvariantCulture.Clone();
        var format = isoCulture.DateTimeFormat;
        format.ShortDatePattern = "yyyy-MM-dd";
        format.ShortTimePattern = "HH:mm:ss";
        format.LongTimePattern = "HH:mm:ss.FFFFFFF";
        format.FullDateTimePattern = "yyyy-MM-dd'T'HH:mm:ss.FFFFFFF";
        format.LongDatePattern = format.ShortDatePattern;

        Thread.CurrentThread.CurrentCulture = isoCulture;
        Console.WriteLine(new LocalDate(2020, 8, 13));
        Console.WriteLine(ZonedDateTime.FromDateTimeOffset(DateTimeOffset.Now));
        Console.WriteLine(DateTime.Now);
        Console.WriteLine(DateTimeOffset.Now);
    }
}

输出:

2020-08-13
2020-08-13T09:52:18 UTC+01 (+01)
2020-08-13 09:52:18.7351962
2020-08-13 09:52:18.7356716 +01:00

我相信.NET在格式化a时只使用“ date pattern” {space}“ time pattern” DateTime,因此我认为没有办法T在其中添加a。但是,LocalDate输出就是您想要的:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何确保字符串格式正确

来自分类Dev

如何确保字符串格式正确

来自分类Dev

如何将日期字符串解析为NodaTime对象?

来自分类Dev

如何将 PS 对象输出为自定义格式化字符串

来自分类Dev

如何验证字符串条目以确保其格式为'Number.Number.Number'(1.2.3)

来自分类Dev

使用Linq将格式化的字符串选择为对象

来自分类Dev

如何使用NodaTime使用文化的ShortDatePattern设置字符串格式?

来自分类Dev

如何在java中将格式化的双精度值打印为字符串?

来自分类Dev

如何从Python中的logging.formatter对象获取格式化程序字符串?

来自分类Dev

如何从JSON对象获取格式化/缩进的JSON字符串?

来自分类Dev

如何将对象键和值转换为格式化的字符串?

来自分类Dev

如何格式化python对象的输出字符串

来自分类Dev

如何格式化给定的时间字符串并转换为日期/时间对象

来自分类Dev

如何获取 logging.LogRecord 对象的格式化字符串

来自分类Dev

序列化显示为字符串格式

来自分类Dev

字符串格式化自定义对象

来自分类Dev

如何将字符串从 servlet 解析为 javascript 并创建一个包含数组值的格式化对象

来自分类Dev

如何在Lua中将ISO 8601持续时间转换为格式化的字符串?

来自分类Dev

确保char指针始终指向相同的字符串文字

来自分类Dev

TensorFlow:如何为 SavedModel 格式化 JSON,期望字符串格式为 3 个整数?

来自分类Dev

使字符串的长度始终为n

来自分类Dev

字符串长度始终为 0

来自分类Dev

表示为字符串时,格式化每行具有一个属性的对象

来自分类Dev

反序列化对象为纯字符串

来自分类Dev

如何检查字符串是否为json格式

来自分类Dev

如何验证字符串是否为YYYYMMDD格式?

来自分类Dev

如何从格式字符串中调用对象的方法?(蟒蛇)

来自分类Dev

将ISO格式的日期字符串解析为其组件

来自分类Dev

在MongoDB中将所有MongoDB的日期时间字符串更新为ISO日期时间格式

Related 相关文章

  1. 1

    如何确保字符串格式正确

  2. 2

    如何确保字符串格式正确

  3. 3

    如何将日期字符串解析为NodaTime对象?

  4. 4

    如何将 PS 对象输出为自定义格式化字符串

  5. 5

    如何验证字符串条目以确保其格式为'Number.Number.Number'(1.2.3)

  6. 6

    使用Linq将格式化的字符串选择为对象

  7. 7

    如何使用NodaTime使用文化的ShortDatePattern设置字符串格式?

  8. 8

    如何在java中将格式化的双精度值打印为字符串?

  9. 9

    如何从Python中的logging.formatter对象获取格式化程序字符串?

  10. 10

    如何从JSON对象获取格式化/缩进的JSON字符串?

  11. 11

    如何将对象键和值转换为格式化的字符串?

  12. 12

    如何格式化python对象的输出字符串

  13. 13

    如何格式化给定的时间字符串并转换为日期/时间对象

  14. 14

    如何获取 logging.LogRecord 对象的格式化字符串

  15. 15

    序列化显示为字符串格式

  16. 16

    字符串格式化自定义对象

  17. 17

    如何将字符串从 servlet 解析为 javascript 并创建一个包含数组值的格式化对象

  18. 18

    如何在Lua中将ISO 8601持续时间转换为格式化的字符串?

  19. 19

    确保char指针始终指向相同的字符串文字

  20. 20

    TensorFlow:如何为 SavedModel 格式化 JSON,期望字符串格式为 3 个整数?

  21. 21

    使字符串的长度始终为n

  22. 22

    字符串长度始终为 0

  23. 23

    表示为字符串时,格式化每行具有一个属性的对象

  24. 24

    反序列化对象为纯字符串

  25. 25

    如何检查字符串是否为json格式

  26. 26

    如何验证字符串是否为YYYYMMDD格式?

  27. 27

    如何从格式字符串中调用对象的方法?(蟒蛇)

  28. 28

    将ISO格式的日期字符串解析为其组件

  29. 29

    在MongoDB中将所有MongoDB的日期时间字符串更新为ISO日期时间格式

热门标签

归档