如何在DateTime c#

时间:2015-08-19 08:19:53

标签: c# date datetime cultureinfo

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

  1. 如果时间是00:00:00,则仅从中获取日期。
  2. 如果两者都存在,则获取日期和时间。
  3. 我希望使用CurrentCulture.DateTimeFormatConvert.ToString(DateTime, IFormatProvider),否则我知道怎么做 使用.ToString()扩展方法执行此操作。
  4. 我试过以下事情:

    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如果时间不存在。

    但即使时间与日期有关,上面的行也只给出了日期。

2 个答案:

答案 0 :(得分:9)

对我来说,这很简单:

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

蒂姆说,OP希望使用Convert.ToString。它没有计算,所以我拒绝。为什么不计算?这是Convert.ToString的代码:

public static string ToString(DateTime value, IFormatProvider provider)
{
    return value.ToString(provider);
}

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

那就是说,如果你顽固,我想你可以在你自己的小班中实现IFormatProvider,根据条件改变格式提供者,然后传递它而不是默认的格式提供者。然后,恭喜,您已经创建了许多无意义的代码,使用Convert.ToString提供完全相同的结果。

答案 1 :(得分:2)

过了一会儿为自己写了一个方法。

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