DateTimeFormat Issue
我没有从 DateTime-Object 获得以下所需的输出:
2010-03-29 13:15:00
我的默认本地化是 de-DE,所以一个简单的 ToString 给了我:
29.03.2010 13:15:00
我尝试的是从 US-Culture 创建一个 DateTimeFormatInfo 对象并使用它的 DateTimePatterns 但没有成功:
1
2 3 |
Dim usDateFormat As Globalization.DateTimeFormatInfo = New Globalization.CultureInfo("en-US", False).DateTimeFormat
usDateFormat.DateSeparator ="-" ruleResult.Claim.Last_Updated_Date.ToString(usDateFormat.ShortDatePattern) |
输出:3.29.2010
什么是获得我想要的 DateTimeFormat 的最佳方式(可读、最快)(我有时需要短日期,有时需要日期和时间,就像我上面的例子一样)?
感谢您的期待,
蒂姆
编辑:为什么我的 DateTimeFormatInfo 方法不起作用,并且在使用 String.Format 或 ToString(“yyyy-MM-dd HH:mm:ss”) 解决方案而不是私有共享(静态) DateTimeFormatInfo 时会产生性能差异-目的?我至少调用了这个函数 30k 次,里面有很多日期要格式化。
我认为您正在寻找的是:
1
|
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
这里有一些例子,我想如果你看一下你就可以理解它是如何工作的:
1
2 3 4 5 6 7 8 9 10 11 12 13 |
// create date time 2008-03-09 16:05:07.123 DateTime dateTime = new DateTime(2008, 3, 9, 16, 5, 7, 123); dateTime.ToString("y yy yyy yyyy"); //"8 08 008 2008" year |
要获得
1
|
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
有关详细信息,请参阅此 MSDN 文章
这个解决方案怎么样:
1
2 3 4 5 6 7 8 |
// Get a default DateTimeFormat
var dateTimeFormat = CultureInfo.GetCultureInfo("en-US").DateTimeFormat; // Clone it to make it writeable dateTimeFormat = (DateTimeFormatInfo)dateTimeFormat.Clone(); // Change the DateSeparator dateTimeFormat.DateSeparator ="-"; // Output it as normal var output = DateTime.Now.ToString("g", dateTimeFormat); |
我认为大多数人不知道你可以通过调用
更新
正如蒂姆所说,你也可以这样称呼它:
1
2 3 4 5 6 |
// Get a default DateTimeFormat
var dateTimeFormat = new CultureInfo("en-US").DateTimeFormat; // Change the DateSeparator dateTimeFormat.DateSeparator ="-"; // Output it as normal var output = DateTime.Now.ToString("g", dateTimeFormat); |
这行得通,因为我们创建了一个源自给定文化的新
所以说到底,两个版本都在做同样的事情,换句话说。如果两个版本之间存在性能差异,我无法判断,但我认为这可以忽略不计。
更新 2
在阅读了汤姆斯的最后一条评论后,他尝试了这样的事情:
1
2 3 4 5 6 |
// Get a default DateTimeFormat
var dateTimeFormat = new CultureInfo("en-US").DateTimeFormat; // Change the DateSeparator dateTimeFormat.DateSeparator ="-"; // Output it as normal var output = DateTime.Now.ToString(dateTimeFormat.ShortDatePattern); |
这会导致错误的输出。这是因为在
是一样的
由于事实上,
1
2 3 4 5 6 |
// Get a default DateTimeFormat
var dateTimeFormat = new CultureInfo("en-US").DateTimeFormat; // Change the DateSeparator dateTimeFormat.DateSeparator ="-"; // Output it as normal var output = DateTime.Now.ToString(dateTimeFormat.ShortDatePattern, dateTimeFormat); |
通过这些信息,您还应该能够对更快的情况做出一些假设:
1
2 |
var output = DateTime.Now.ToString(dateTimeFormat.ShortDatePattern, dateTimeFormat);
var output = DateTime.Now.ToString("M/d/yyyy", dateTimeFormat); |
由于它们完全相同,因此性能应该没有差异
您可以像这样在 DateTime 的 ToString 中使用格式化选项
长
1
|
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
短
1
|
DateTime.Now.ToString("yyyy-MM-dd");
|
1
2 3 |
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
DateTime.Now.ToString("yyyy-MM-dd") |
你也可以试试
1
|
string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now)
|
对于预定义的模式检查这个:
http://alexonasp.net/samples/stringformatting/
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/269626.html