如何仅在 DateTime c# 中的时间为 00:00:00 时获取日期
How to get date only if time is 00:00:00 from DateTime c#
我想将 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);
}
是的,基本上是一样的。
就是说,如果你固执,我想你可以在你自己的小 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;
}
}
我想将 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);
}
是的,基本上是一样的。
就是说,如果你固执,我想你可以在你自己的小 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;
}
}