我想将 DateTime 对象转换为字符串。我想要实现的是以下几点:
- 仅当时间为 00:00:00 时才从中获取日期。
- 获取日期和时间(如果两者都存在)。
- 我想使用
CurrentCulture.DateTimeFormat
和Convert.ToString(DateTime, IFormatProvider)
,否则我知道怎么做 使用.ToString()
扩展方法执行此操作。
我已经尝试过以下事情:
Thread.CurrentPrincipal = principal;
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.DateTimeFormat.ShortDatePattern = MPAResource.DateFormat;
culture.DateTimeFormat.LongTimePattern = "hh:mm:ss tt";
culture.DateTimeFormat.ShortTimePattern = "hh:mm:ss tt";
culture.DateTimeFormat.FullDateTimePattern = MPAResource.DateTimeFormat;
Thread.CurrentThread.CurrentCulture = culture;
然后:
string x = Convert.ToString(x.ExpectedJoiningDate, CultureInfo.CurrentCulture);
输出为 09-Oct-2015 11:00 AM
。如果有时间,我想要 09-Oct-2015 11:00 AM
,如果没有时间,我想要 09-Oct-2015
。
但上面一行只给我日期,即使时间和日期一起出现也是如此。
最佳答案
在我看来这很简单:
var dt = x.ExpectedJoiningDate;
string x = (dt.TimeOfDay == TimeSpan.Zero)?dt.ToShortDateString():dt.ToString();
PS:如果愿意,您可以在 ToString 中使用文化作为参数。参见 https://msdn.microsoft.com/en-us/library/aa326720(v=vs.71).aspx有关如何执行此操作的详细信息。
Tim 表示 OP 想要使用 Convert.ToString
。它不计算,所以我拒绝。为什么不计算?下面是 Convert.ToString
的代码:
public static string ToString(DateTime value, IFormatProvider provider)
{
return value.ToString(provider);
}
是的,这基本上是一样的。
也就是说,如果您固执己见,我想您可以在自己的小类中实现 IFormatProvider
,根据条件更改格式提供程序,然后传递它而不是默认格式提供程序。然后,恭喜,您已经创建了很多毫无意义的代码,这些代码使用 Convert.ToString
给出了完全相同的结果。
关于c# - 如何仅在时间为 00 :00:00 from DateTime c# 时获取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32090126/