我有一个 WP8 应用程序,它将当前时间发送到网络服务。
我通过调用获取日期时间字符串
DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff")
对于大多数用户来说,它工作得很好,并为我提供了正确的字符串,如 "09/10/2013 04:04:31.415"
。但对于某些用户,结果字符串类似于 "09/14/2013 07.20.31.371"
,这会导致我的网络服务出现问题。
是因为某些文化格式问题吗?如何确保结果字符串由冒号而不是点分隔?
最佳答案
Is it because some culture format issue?
是的。您的用户必须处于时间分隔符为点的文化中。 “:”和“/”在 custom date and time formats 中都以文化敏感的方式解释。 .
How can I make sure the result string is delimited by colon instead of dot?
我建议指定 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 日,具体取决于读者的文化。)
关于c# - DateTime.ToString ("MM/dd/yyyy HH:mm:ss.fff") 导致类似于 "09/14/2013 07.20.31.371",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874102/