C#-如何格式化日期时间以删除尾随的零

本文关键字:删除 时间 格式化 日期 C#- | 更新日期: 2023-09-27 18:20:14

我正在设置一个编排类,将多个操作作为一个大事务处理。对于这些事务中的每一个,我都为它们提供了在编排开始时实例化的相同时间戳。

我使用以下行:

 var transactionTimestamp =  DateTime.UtcNow.ToString("o");

我在系统中有一个约束,它规定时间戳不能有任何尾随零。

例如:

2013-06-26T19:51:38.0083980Z //bad
2013-06-26T19:51:38.008398Z  //good
2013-06-26T19:51:38.0083988Z //good

C#-如何格式化日期时间以删除尾随的零

内置的DateTime格式"o"与自定义格式:"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK"相当。如果只使用该格式,但将小写f替换为大写1,则不会有尾随零。

DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'FFFFFFFK");
  • 自定义日期和时间格式字符串

使用Regex可以很容易地实现这一点。有一种方法。

string result = Regex.Replace("2013-06-26T19:51:38.0083980Z", "0+Z$", "Z");
// result == "2013-06-26T19:51:38.008398Z"
string result2 = Regex.Replace("2013-06-26T19:51:38.0083988Z", "0+Z$", "Z")
// result2 == "2013-06-26T19:51:38.0083988Z"

我会编写自己的帮助方法,比如;

public string GetDtString(DateTime dt)
{
    RegEx rgx = new RegEx("[1-9]0+Z'b");
    return rgx.Replace(dt.ToString("o"), System.String.Empty);
}

它基本上只是返回一个带有所有0的dt字符串,这些0出现在数字1-9之后,Z'b(Z后面跟着一个单词边界)之前,带有一个空字符串。