Answers:
DateTime值没有重载,但是您可以获取Ticks
值包含的long值,将它们进行比较,然后从结果中创建一个新的DateTime值:
new DateTime(Math.Min(Date1.Ticks, Date2.Ticks))
(请注意,DateTime结构还包含一个Kind
属性,该属性不会保留在新值中。这通常不成问题;如果您比较不同类型的DateTime值,则该比较毫无意义。)
System.DateTime
实例的所有信息(剔号除外)
没有内置的方法可以做到这一点。您可以使用以下表达式:
(date1 > date2 ? date1 : date2)
找到两者中的最大值。
您可以编写一种通用方法来进行计算Min
或Max
针对任何类型(只要Comparer<T>.Default
设置正确即可):
public static T Max<T>(T first, T second) {
if (Comparer<T>.Default.Compare(first, second) > 0)
return first;
return second;
}
您也可以使用LINQ:
new[]{date1, date2, date3}.Max()
怎么样:
public static T Min<T>(params T[] values)
{
if (values == null) throw new ArgumentNullException("values");
var comparer = Comparer<T>.Default;
switch(values.Length) {
case 0: throw new ArgumentException();
case 1: return values[0];
case 2: return comparer.Compare(values[0],values[1]) < 0
? values[0] : values[1];
default:
T best = values[0];
for (int i = 1; i < values.Length; i++)
{
if (comparer.Compare(values[i], best) < 0)
{
best = values[i];
}
}
return best;
}
}
// overload for the common "2" case...
public static T Min<T>(T x, T y)
{
return Comparer<T>.Default.Compare(x, y) < 0 ? x : y;
}
适用于支持IComparable<T>
或的任何类型IComparable
。
实际上,使用LINQ,另一种替代方法是:
var min = new[] {x,y,z}.Min();
public static class DateTool
{
public static DateTime Min(DateTime x, DateTime y)
{
return (x.ToUniversalTime() < y.ToUniversalTime()) ? x : y;
}
public static DateTime Max(DateTime x, DateTime y)
{
return (x.ToUniversalTime() > y.ToUniversalTime()) ? x : y;
}
}
这样可以使日期具有不同的“种类”,并返回传入的实例(不返回由Ticks或Millsseconds构造的新DateTime)。
[TestMethod()]
public void MinTest2()
{
DateTime x = new DateTime(2001, 1, 1, 1, 1, 2, DateTimeKind.Utc);
DateTime y = new DateTime(2001, 1, 1, 1, 1, 1, DateTimeKind.Local);
//Presumes Local TimeZone adjustment to UTC > 0
DateTime actual = DateTool.Min(x, y);
Assert.AreEqual(x, actual);
}
请注意,该测试将无法通过格林威治东部。
如果您想更像Math.Max来调用它,则可以执行以下非常简短的表达式主体:
public static DateTime Max(params DateTime[] dates) => dates.Max();
[...]
var lastUpdatedTime = DateMath.Max(feedItemDateTime, assemblyUpdatedDateTime);
怎么样DateTime
扩展方法?
public static DateTime MaxOf(this DateTime instance, DateTime dateTime)
{
return instance > dateTime ? instance : dateTime;
}
用法:
var maxDate = date1.MaxOf(date2);
DateTime.MaxOf(dt1, dt2)
,但我不知道该怎么做...
// Two different dates
var date1 = new Date(2013, 05, 13);
var date2 = new Date(2013, 04, 10) ;
// convert both dates in milliseconds and use Math.min function
var minDate = Math.min(date1.valueOf(), date2.valueOf());
// convert minDate to Date
var date = new Date(minDate);