我没有从DateTime-Object获得所需的输出:
2010-03-29 13:15:00
我的默认本地化是de-DE,所以一个简单的ToString给了我:
29.03.2010 13:15:00
我尝试过的是从US-Culture创建一个DateTimeFormatInfo对象并使用它的DateTimePatterns但没有成功:
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-Object?我正在调用此函数至少30k次,并且内部格式有很多日期。
答案 0 :(得分:11)
我认为你在寻找的是:
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
以下是一些示例,我认为如果看一下那么你可以理解它是如何工作的:
// 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
dateTime.ToString("M MM MMM MMMM"); // "3 03 Mar March" month
dateTime.ToString("d dd ddd dddd"); // "9 09 Sun Sunday" day
dateTime.ToString("h hh H HH" ); // "4 04 16 16" hour 12/24
dateTime.ToString("m mm" ); // "5 05" minute
dateTime.ToString("s ss" ); // "7 07" second
dateTime.ToString("f ff fff ffff"); // "1 12 123 1230" sec.fraction
dateTime.ToString("F FF FFF FFFF"); // "1 12 123 123" without zeroes
dateTime.ToString("t tt" ); // "P PM" A.M. or P.M.
dateTime.ToString("z zz zzz" ); // "-6 -06 -06:00" time zone
答案 1 :(得分:4)
要获得2010-03-29 13:15:00
,我只会使用自定义模式。在这种情况下:
DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
有关详细信息,请参阅this MSDN article
答案 2 :(得分:2)
这个解决方案怎么样:
// 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);
我认为大多数人不知道你可以通过调用Clone()
方法创建一个新对象来获得文化的可写版本。
正如蒂姆所说,你也可以这样称呼它:
// 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);
这很有效,因为我们创建了一个来自特定文化的新CultureInfo
。第一个是只读的原因来自这样的事实:在第一种情况下,我们将在框架内部的某个地方获得对某个静态创建的实例的引用,并通过Clone()
调用创建一个具有相同设置的新鲜课程。在第二种方法中,我们直接创建新课程,但是我们想要从特定文化中获取所有设置。
因此,在一天结束时,两个版本正在做同样的事情,换句话说。如果两个版本之间存在性能差异,我无法分辨,但我认为这可以忽略不计。
读完Toms的最后评论后,他尝试这样的事情:
// 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.ShortDatePattern
内只是包含M/d/yyyy
的普通字符串。所以它与调用DateTime.Now.ToString("M/d/yyyy")
相同。
由于事实,/
将由DateSeparator取代,目前没有给出IFormatProvider
,它将采用您的案例中的当前文化德语。因此,要解决此问题,您应该尝试以下代码:
// 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);
通过这些信息,您还应该能够对更快的内容做出一些假设:
var output = DateTime.Now.ToString(dateTimeFormat.ShortDatePattern, dateTimeFormat);
var output = DateTime.Now.ToString("M/d/yyyy", dateTimeFormat);
由于这些完全相同,因此性能应该没有区别
答案 3 :(得分:1)
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
DateTime.Now.ToString("yyyy-MM-dd")
答案 4 :(得分:1)
您可以使用DateTime的ToString中的格式化选项,如下所示
<强>长强>
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
<强>短强>
DateTime.Now.ToString("yyyy-MM-dd");
答案 5 :(得分:0)
string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now)
答案 6 :(得分:0)
您也可以尝试format(date.now,"yyyy-MM-dd HH:mm:ss)