你可以使用DateTime.Parse
与DateTimeStyles.NoCurrentDateDefault
防止您从当前日期:
CultureInfo culture = CultureInfo.InvariantCulture;
var dt1 = DateTime.Parse("10:00:00", culture, DateTimeStyles.NoCurrentDateDefault);
var dt2 = DateTime.Parse("10pm", culture, DateTimeStyles.NoCurrentDateDefault);
var dt3 = DateTime.Parse("01/02/2014", culture, DateTimeStyles.NoCurrentDateDefault);
var dt4 = DateTime.Parse("01/02/2014 10:00:00", culture, DateTimeStyles.NoCurrentDateDefault);
// problem, is this a date only or a date+time?
var dt5 = DateTime.Parse("01/02/2014 00:00:00", culture, DateTimeStyles.NoCurrentDateDefault);
现在年为1。这样你至少可以只认倍。在没有时间和午夜日期时间的情况下,您仍然有问题需要区分。
因此,这可能已经足够:
bool dt1TimeOnly, dt1DateOnly, dt1DateAndTime;
dt1TimeOnly = dt1.Year == 1;
dt1DateOnly = !dt1TimeOnly && dt1.TimeOfDay == TimeSpan.FromHours(0);
dt1DateAndTime = !dt1TimeOnly && !dt1DateOnly;
所以唯一的办法准确地识别输入是提供所有支持的格式,并使用每个DateTime.TryParseExact
。
例如与此枚举:
public enum DateTimeType
{
Date,
Time,
DateTime,
Unknown
}
而且这种方法:
public DateTimeType GetDateTimeType(string input, CultureInfo culture, out DateTime parsedDate)
{
if(culture == null) culture = CultureInfo.CurrentCulture;
var supportedFormats = new[] {
new{ Pattern = culture.DateTimeFormat.ShortDatePattern, Type = DateTimeType.Date },
new{ Pattern = culture.DateTimeFormat.ShortTimePattern, Type = DateTimeType.Time },
new{ Pattern = culture.DateTimeFormat.LongDatePattern, Type = DateTimeType.Date },
new{ Pattern = culture.DateTimeFormat.LongTimePattern, Type = DateTimeType.Time },
new{ Pattern = "hhtt", Type = DateTimeType.Time},
new{
Pattern = culture.DateTimeFormat.ShortDatePattern + " " + culture.DateTimeFormat.LongTimePattern,
Type = DateTimeType.DateTime
}
};
foreach(var fi in supportedFormats)
{
DateTime dt;
if (DateTime.TryParseExact(input, fi.Pattern, culture, DateTimeStyles.NoCurrentDateDefault, out dt))
{
parsedDate = dt;
return fi.Type;
}
}
parsedDate = default(DateTime);
return DateTimeType.Unknown;
}
现在,这产生了正确的日期和DateTimeTypes
:
DateTime dt1;
DateTimeType type1 = GetDateTimeType("10:00:00", culture, out dt1);
DateTime dt2;
DateTimeType type2 = GetDateTimeType("10pm", culture, out dt2);
DateTime dt3;
DateTimeType type3 = GetDateTimeType("01/02/2014", culture, out dt3);
DateTime dt4;
DateTimeType type4 = GetDateTimeType("01/02/2014 10:00:00", culture, out dt4);
DateTime dt5;
DateTimeType type5 = GetDateTimeType("01/02/2014 00:00:00", culture, out dt5);
那么,它被命名为'日期时间' – Steve
我还有什么可以用来做到这一点? – BG100
你如何确定你应该使用日期还是时间? – scheien