如何仅在DateTime c#的时间为00:00:00时获取日期
本文关键字:00时 获取 取日期 时间 何仅 DateTime | 更新日期: 2023-09-27 18:08:52
我想将DateTime对象转换为字符串。我想实现以下目标:
- 仅当时间为00:00:00时,才从中获取日期
- 获取日期和时间(如果两者都存在(
- 我想使用
CurrentCulture.DateTimeFormat
和Convert.ToString(DateTime, IFormatProvider)
,否则我知道怎么做使用CCD_ 3扩展方法来实现这一点
我试过以下几件事:
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();
附言:如果你愿意,你可以在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
可以得到完全相同的结果。
过了一段时间,我为自己编写了一个方法。
public static string ConvertToMyDateTimeFormat(Nullable<DateTime> value, CultureInfo IFormateProvider)
{
if (value.HasValue)
{
if (value.Value.TimeOfDay.Ticks > 0)
{
return value.Value.ToString(IFormateProvider);
}
else
{
return value.Value.ToString(IFormateProvider.DateTimeFormat.ShortDatePattern);
}
}
else
{
return string.Empty;
}
}