我想将DateTime对象转换为字符串。我想要实现的是:
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
如果时间不存在。
但即使时间与日期有关,上面的行也只给出了日期。
答案 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;
}
}