2

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

我使用以下行:

 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
4

3 回答 3

9

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

IE

DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'FFFFFFFK");
于 2013-06-27T17:29:53.467 回答
3

您可以使用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"
于 2013-06-27T17:29:59.370 回答
1

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

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 后跟单词边界)和空字符串。

于 2013-06-27T17:30:03.367 回答