最佳实践:new DateTime() vs DateTime. parse()

本文关键字:DateTime vs parse new 最佳 | 更新日期: 2023-09-27 18:14:29

假设我正在创建一个类对象的实例,它同时具有名称和日期。在确定日期时,哪种做法被认为是最佳做法?

var employees = new List<Employee>() 
{ 
    new Employee {Name = "Foo", HireDate = new DateTime(2000, 1, 15)}, 
    new Employee {Name = "Bar", HireDate = new DateTime(2001, 5, 25)}, 
}; 

var employees = new List<Employee>() 
{ 
    new Employee {Name = "Foo", HireDate = DateTime.Parse("2000, 1, 15")}, 
    new Employee {Name = "Bar", HireDate = DateTime.Parse("2001, 5, 25")}, 
}; 

我假设真的没有太大的区别,但我对c#有点陌生,所以我不确定大多数c#程序员更喜欢哪一种,以及为什么(性能、可读性等)。提前感谢您提供的任何见解!

最佳实践:new DateTime() vs DateTime. parse()

首选new DateTime

对于new,它将允许您直接使用变量:

// clean because the variable is applied directly to the function
int year = 2000;
var date1 = new DateTime(year, 1, 15);
var date1 = new DateTime(year, 7, 3);
var date1 = new DateTime(year, 8, 19);
// kind of gross and prone to errors because it is appended to the string
int day = 23;
var date1 = DateTime.Parse("2001, 5, " + day.ToString());

在反对Parse的论证中,它直到运行时才检测错误:

var date1 = new DateTime(200fdsa, 1, 15); // Error on compile
var date2 = DateTime.Parse("2001fdsjf, 5, 25"); // Must run to find the error

DateTime.Parse将始终具有较差的性能,因为它需要运行检测错误并将字符串转换为数值的代码。它会在程序运行时执行此操作。

但是,如果必须接受字符串输入(例如来自文本文件),则应该使用为该作业构建的工具:DateTime.Parse


如果你对简化代码中日期/时间常量的规范感兴趣,Jon Skeet为此编写了一个库。

它有点旧,没有维护,但是具体的代码(整数常量/日期和时间结构的扩展方法)可能真的不需要太多的维护。

  • MiscUtil

这些扩展的源代码在MiscUtil'MiscUtil'Extensions'TimeRelated'下(在源zip中)

它将让您以更友好的方式编写日期时间,同时仍然提供与new DateTime(2012, 11, 13)性能相似的干净代码:

DateTime someDateAndTime = 19.June(1976) + 8.Hours();

我认为这最终是主观的,但我无法想象在这种情况下使用Parse的任何好理由。为什么要在接受实际组件值的简单构造函数上执行(低效的)字符串解析?

我只在您提供的示例中使用new DateTime()。您确切地知道日期的年/月/日组成部分是什么。为什么要创建一个字符串并解析它?