【问题标题】:C# - How to format datetime to remove trailing zerosC# - 如何格式化日期时间以删除尾随零
【发布时间】:2013-06-25 07:54:59
【问题描述】:

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

我使用以下行:

 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

【问题讨论】:

  • 您应该在转换后的DateTime 上使用正则表达式。我认为没有 dt 格式说明符可以删除不会产生潜在副作用的尾随零。

标签: c# .net string datetime


【解决方案1】:

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

DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'FFFFFFFK");

【讨论】:

    【解决方案2】:

    您可以使用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"
    

    【讨论】:

      【解决方案3】:

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

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

      它基本上只返回 dt 字符串,所有 0 出现在数字 1-9 之后和 Z\b(Z 后跟单词边界)之前,并带有一个空字符串。

      【讨论】:

        猜你喜欢
        • 2020-11-13
        • 2013-01-29
        • 2022-10-14
        • 1970-01-01
        • 2020-09-11
        • 2011-05-30
        • 1970-01-01
        • 2020-06-06
        • 1970-01-01
        相关资源
        最近更新 更多