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

标签 c# date datetime cultureinfo

我想将 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);
}

是的,这基本上是一样的。

也就是说,如果您固执己见,我想您可以在自己的小类中实现 IFormatProvider,根据条件更改格式提供程序,然后传递它而不是默认格式提供程序。然后,恭喜,您已经创建了很多毫无意义的代码,这些代码使用 Convert.ToString 给出了完全相同的结果。

关于c# - 如何仅在时间为 00 :00:00 from DateTime c# 时获取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32090126/

相关文章:

c# - 循环到 LINQ 转换 -

c# - 我如何知道哪个 DMS 规则称为 Sitecore 组件?

c# - 使用正则表达式转换数据值

java - 如何在java中设置到期日期

r - 日期填充直到遇到下一个日期值 R

c# - 如何将格式为 "dd/mm"的日期与 DateTime.Now 进行比较

datetime - MVC 4 单页应用程序和日期时间

java - Spring Data Projection 中的自定义日期时间格式

c# - 从函数中检索参数

php - 当日期刚刚保存为 UNIX 时间戳时,针对特定日期的 MySQL 过滤器