Microsoft specifies :
作为时间分隔符
,但似乎至少有两个时间分隔符:一个在小时和分钟之间,另一个在分钟和秒之间。
(来源:wellisolutions.de)
(来源:wellisolutions.de)
有没有办法得到具体的时间分隔符?我需要一个介于小时和分钟之间的时间,另一个介于分钟和秒之间的时间。
我也不介意以其他方式构建我的 DateTime 字符串,例如使用 standard format string T
或 G
,但它们都不起作用
mydate.ToString("T");
// Output: 20-29-46
// Expected output: 20-29:46 (as shown by Windows clock)
mydate.ToString("G");
// Output: 09/03-2014 20-29-46
// Expected output: 09/03-2014 20-29:46
最佳答案
只需在 .NET 中根据需要设置格式。例如:
var clonedProvider = (CultureInfo)CultureInfo.CurrentCulture.Clone();
clonedProvider.DateTimeFormat.LongTimePattern = "HH-mm':'ss";
clonedProvider.DateTimeFormat.ShortDatePattern = "dd'/'MM-yyyy";
然后:
mydate.ToString("T", clonedProvider);
mydate.ToString("G", clonedProvider);
请注意,我将冒号 :
和斜杠 /
放入单引号(撇号 '
)中,以防止它们被翻译成任何内容您的文化从一开始就有分隔符。我只想要字面上的冒号和斜线。
如果你不想到处写clonedProvider
,在你当前的线程上永久改变文化:
Thread.CurrentThread.CurrentCulture = CultureInfo.ReadOnly(clonedProvider);
您的应用程序中是否有很多线程?
在评论后编辑:
如果您想查看操作系统设置如何影响您的 .NET 格式提供程序对象,只需检查字符串:
DateTimeFormatInfo.CurrentInfo.ShortDatePattern
DateTimeFormatInfo.CurrentInfo.LongTimePattern
等等。我想您当前的格式提供程序已将 UseUserOverride
设置为 true
,因此来自 Windows 的用户设置将可见。
用户可以输入的“分隔符”的数量没有限制。例如,有人可能会使用 "ddd;dd-MM,yyyy"
。所以那里有三个 分隔符。因此,您必须自己检查字符串,看看有多少“分隔符”和“组件”,以及用户在每个地方使用哪些字符作为分隔符。
仔细阅读您的问题,并结合您的示例,我发现您在 Windows 设置中键入了 HH-mm:ss
。这有问题。当转换为 .NET 语法时,第一个分隔符 -
成为 时间分隔符。然后下一个分隔符,冒号,在 .NET 中是一个“通配符”,意思是“用时间分隔符代替”。所以冒号也被翻译成破折号。
您应该在 Windows 设置中输入
HH-mm':'ss
您再次用单引号(撇号)保护冒号。
现在,如果您的某个用户首先使用非标准分隔符,然后使用标准分隔符 :
(或 /
),而没有在单个中引用后者,会怎样?引号?那么,在那种情况下你是对的,Windows 和 .NET 中的行为是有区别的。显然用户不应该输入这样的格式。 您可以将其称为错误。
关于c# - DateTime.ToString ("T") 和 DateTime.ToString ("G") 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22288233/