如何仅在DateTime c#的时间为00:00:00时获取日期

本文关键字:00时 获取 取日期 时间 何仅 DateTime | 更新日期: 2023-09-27 18:08:52

我想将DateTime对象转换为字符串。我想实现以下目标:

  1. 仅当时间为00:00:00时,才从中获取日期
  2. 获取日期和时间(如果两者都存在(
  3. 我想使用CurrentCulture.DateTimeFormatConvert.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

但上面这行只给我日期,即使时间和日期在一起。

如何仅在DateTime c#的时间为00:00:00时获取日期

在我看来,这是非常直接的:

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;
            }
        }