C# - 我是否替换了完美的代码?

标签 c# .net datetime locale

我有一个快速格式化日期的函数,这里是:

public static string archiveServerDateTime(string datetime)
    {
        DateTime tempDateTime = DateTime.ParseExact(datetime,"dd.MM.yyyy HH:mm:ss", null);
        return tempDateTime.ToString("yyyy/MM/dd:HH:mm:ss");
    }

只找到函数的输出 = 2009.10.22:16:21:03,令人惊讶的是这只在一台生产服务器上,测试服务器工作得很好......

所以现在我将函数重写为旧学校风格:

public static string archiveServerDateTime(string datetime)
    {
        DateTime tempDateTime = DateTime.ParseExact(datetime,"dd.MM.yyyy HH:mm:ss", null);
        string yearPart = Convert.ToString(tempDateTime.Year);
        string monthPart = Convert.ToString(tempDateTime.Month).PadLeft(2,'0');
        string dayPart = Convert.ToString(tempDateTime.Day ).PadLeft(2, '0');
        string hourPart = Convert.ToString(tempDateTime.Hour).PadLeft(2, '0');
        string minutePart = Convert.ToString(tempDateTime.Minute).PadLeft(2, '0'); 
        string secondPart = Convert.ToString(tempDateTime.Second).PadLeft(2,'0');

        return yearPart + @"/" + monthPart + @"/" + dayPart + ":" + hourPart + ":" + minutePart + ":" + secondPart; 
        //return tempDateTime.ToString("yyyy/MM/dd:HH:mm:ss");
    }

所以我想问问女士们先生们,我是不是一开始就替换了非常好的代码,或者这是某种 Microsoft 错误?我们真的可以相信这些看似不那么坚如磐石的新语言功能,还是我只是遗漏了什么?

最佳答案

您应该将 DateTimeFormatInfo.InvariantInfo 作为参数传递给 DateTime.ToString 方法。格式字符串中的 / 始终表示 "/" 字符。它解析为当前区域性的日期分隔符:

return tempDateTime.ToString("yyyy/MM/dd:HH:mm:ss", DateTimeFormatInfo.InvariantInfo);

一般来说,始终在 ToStringParse 方法(不仅仅是在 DateTime 上)明确指定区域性是一个很好的做法。 FxCop(VS 代码分析)的规则会在您不这样做时发出警告。它对非美国文化至关重要,而且其重要性常常被许多程序员低估。

关于C# - 我是否替换了完美的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1655821/

相关文章:

c - localtime() 弄错了,说 date = September 31

c# - Azure Data Lake Store SDK : FileStatusProperties. ChildrenNum 属性始终为 null

c# - 将 DataTable 作为参数发送到存储过程

c# - 池存在后更新 Azure Batch 自动缩放公式

收到格式错误的 IOS 设备时间字符串

datetime - SAS 日期时间格式/信息 - 自 Unix 纪元以来的毫秒数

c# - 在线crm动态,将自定义url参数传递给插件

c# - 如何在 C# 中将字典转换为 JSON 字符串?

.net - 如何允许使用 XslCompiledTransform (.NET) 通过 XSLT 的 document(uri) 函数加载 XML 文档中的 DTD

c++ - 是否可以查明 VNC 连接是否处于事件状态