.net - check - datetime minvalue format c#




Equivalente de Math.Min & Math.Max for Dates? (6)

Agora que temos o LINQ, você pode criar uma matriz com seus dois valores (DateTimes, TimeSpans, whatever) e, em seguida, usar o método de extensão .Max ().

var values = new[] { Date1, Date2 }; 
var max = values.Max(); 

Ele lê bem, é tão eficiente quanto o Max pode ser e é reutilizável por mais de dois valores de comparação.

Todo o problema abaixo se preocupando com o .Kind é um grande negócio ... mas eu evito isso nunca trabalhando na hora local, nunca. Se eu tiver algo importante em relação aos horários, sempre trabalho no UTC, mesmo que isso signifique mais trabalho para chegar lá.

Qual é a maneira mais rápida e fácil de obter o valor mínimo (ou máximo) entre duas datas? Existe um equivalente a Math.Min (& Math.Max) para datas?

Eu quero fazer algo como:

 if (Math.Min(Date1, Date2) < MINIMUM_ALLOWED_DATE) {
      //not allowed to do this
 }

Obviamente, o Math.Min acima não funciona porque são datas.


Como sobre um método de extensão DateTime ?

public static DateTime MaxOf(this DateTime instance, DateTime dateTime)
{
    return instance > dateTime ? instance : dateTime;
}

Uso:

var maxDate = date1.MaxOf(date2);

Não há nenhum método embutido para fazer isso. Você pode usar a expressão:

(date1 > date2 ? date1 : date2)

para encontrar o máximo dos dois.

Você pode escrever um método genérico para calcular Min ou Max para qualquer tipo (desde que o Comparer<T>.Default esteja definido apropriadamente):

public static T Max<T>(T first, T second) {
    if (Comparer<T>.Default.Compare(first, second) > 0)
        return first;
    return second;
}

Você pode usar o LINQ também:

new[]{date1, date2, date3}.Max()

Não há sobrecarga para os valores DateTime, mas você pode obter o valor longo Ticks que é o que os valores contêm, compará-los e, em seguida, criar um novo valor DateTime a partir do resultado:

new DateTime(Math.Min(Date1.Ticks, Date2.Ticks))

(Observe que a estrutura DateTime também contém uma propriedade Kind , que não é retida no novo valor. Isso normalmente não é um problema; se você comparar valores DateTime de tipos diferentes, a comparação não faz sentido de qualquer maneira.)


Linq.Min() / Linq.Max() :

DateTime date1 = new DateTime(2000,1,1);
DateTime date2 = new DateTime(2001,1,1);

DateTime minresult = new[] { date1,date2 }.Min();
DateTime maxresult = new[] { date1,date2 }.Max(); 

// 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); 

http://jsfiddle.net/5CR37/







.net