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

How to get date only if time is 00:00:00 from DateTime c#

我想将 DateTime 对象转换为字符串。我想要实现的是以下事情:

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

是的,基本上是一样的。

就是说,如果你固执,我想你可以在你自己的小 class 中实现 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;
            }
        }