是因为一些文化格式问题吗?
是的。您的用户必须处于时间分隔符为点的文化中。":" 和 "/" 都以自定义日期和时间格式以文化敏感的方式解释。
如何确保结果字符串由冒号而不是点分隔?
我建议指定CultureInfo.InvariantCulture
:
string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
CultureInfo.InvariantCulture);
或者,您可以只引用时间和日期分隔符:
string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");
...但这会给您“有趣”的结果,如果您让用户在默认日历系统不是公历的文化中运行,您可能不会想到这些结果。例如,采用以下代码:
using System;
using System.Globalization;
using System.Threading;
class Test
{
static void Main()
{
DateTime now = DateTime.Now;
CultureInfo culture = new CultureInfo("ar-SA"); // Saudi Arabia
Thread.CurrentThread.CurrentCulture = culture;
Console.WriteLine(now.ToString("yyyy-MM-ddTHH:mm:ss.fff"));
}
}
这会产生以下输出(2013 年 9 月 18 日):
11/12/1434 15:04:31.750
我的猜测是您的 Web 服务会对此感到惊讶!
实际上,我不仅建议使用不变的文化,而且还建议更改为 ISO-8601 日期格式:
string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.InvariantCulture);
这是一种更被全球接受的格式——它也是可排序的,并且使月份和日期的顺序变得明显。(而 06/07/2013 可以解释为 6 月 7 日或 7 月 6 日,具体取决于读者的文化。)