c# - DateTime.ToString ("MM/dd/yyyy HH:mm:ss.fff") 导致类似于 "09/14/2013 07.20.31.371"

标签 c# windows-phone-8

我有一个 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/

相关文章:

c# - 更改 LambdaExpression 中的参数名称只是为了显示

c# - 如何在 .net 后端使用 ChannelUri 向特定用户发送通知

c# - WP8 XAML DataTrigger CallMethodAction 用于从代码后面调用方法

c# - 麻雀工具包

c# - 在 Windows Phone 8.1 XAML 中检测停用和应用程序关闭

cordova - 如何发布WP8 Cordova应用程序?

c# - 如何创建 Between 扩展方法

c# - 数组元素到结构约束方法

c# - 重载匿名函数

c# - 私有(private)服务器/客户端的自签名证书安全