Gibt es einen besseren Weg, um einen Datetime auf eine bestimmte Genauigkeit zu trimmen? [Duplikat]

StackOverflow https://stackoverflow.com/questions/152774

  •  02-07-2019
  •  | 
  •  

Frage

    

Diese Frage bereits eine Antwort hier:

         

Was ist der beste Weg, um ein Datetime-Objekt auf eine bestimmte Genauigkeit zu trimmen? Zum Beispiel, wenn ich einen Datetime mit einem Wert von ‚2008-09-29 09.41.43‘ habe, aber ich will nur dann ist es Präzision auf die Minute genau zu sein, gibt es eine bessere Möglichkeit, als dies zu tun?

private static DateTime TrimDateToMinute(DateTime date)
{
    return new DateTime(
        date.Year, 
        date.Month, 
        date.Day, 
        date.Hour, 
        date.Minute, 
        0);
}

Was würde ich wirklich will, ist es variabel zu machen, damit ich seine Präzision auf die Sekunde, Minute, Stunde oder Tag einstellen könnte.

War es hilfreich?

Lösung

static class Program
{
    //using extension method:
    static DateTime Trim(this DateTime date, long roundTicks)
    {
        return new DateTime(date.Ticks - date.Ticks % roundTicks, date.Kind);
    }

    //sample usage:
    static void Main(string[] args)
    {
        Console.WriteLine(DateTime.Now);
        Console.WriteLine(DateTime.Now.Trim(TimeSpan.TicksPerDay));
        Console.WriteLine(DateTime.Now.Trim(TimeSpan.TicksPerHour));
        Console.WriteLine(DateTime.Now.Trim(TimeSpan.TicksPerMillisecond));
        Console.WriteLine(DateTime.Now.Trim(TimeSpan.TicksPerMinute));
        Console.WriteLine(DateTime.Now.Trim(TimeSpan.TicksPerSecond));
        Console.ReadLine();
    }

}

Andere Tipps

Sie können eine Aufzählung verwenden

public enum DateTimePrecision
{
  Hour, Minute, Second
}

public static DateTime TrimDate(DateTime date, DateTimePrecision precision)
{
  switch (precision)
  {
    case DateTimePrecision.Hour:
      return new DateTime(date.Year, date.Month, date.Day, date.Hour, 0, 0);
    case DateTimePrecision.Minute:
      return new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, 0);
    case DateTimePrecision.Second:
      return new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second);
    default:
      break;
  }
}

und erweitern, wie erforderlich.

Es gibt einige gute Lösungen präsentierten, aber wenn ich dies tun müssen, habe ich einfach tun:

DateTime truncDate;
truncDate = date.Date; // trim to day
truncDate = date.Date + TimeSpan.Parse(string.Format("{0:HH:00:00}", date)); // trim to hour
truncDate = date.Date + TimeSpan.Parse(string.Format("{0:HH:mm}", date)); // trim to minute
truncDate = date.Date + TimeSpan.Parse(string.Format("{0:HH:mm:ss}", date)); // trim to second

Hoffe, es hilft.

Ich mag diese Methode. Jemand erwähnte es gut war, das Datum Art zu erhalten, etc. Dies wird erreicht, daß, weil es nicht ein neues Datum macht es einfach subtrahiert der Rest Zecken.

private DateTime FloorToHour(DateTime dt)
{
  return dt.AddTicks(-1 * (dt.Ticks % TimeSpan.TicksPerHour));
}
    static DateTime TrimDate(DateTime date, long roundTicks)
    {
        return new DateTime(date.Ticks - date.Ticks % roundTicks);
    }

    //sample usage:
    static void Main(string[] args)
    {
        Console.WriteLine(DateTime.Now);
        Console.WriteLine(TrimDate(DateTime.Now, TimeSpan.TicksPerDay));
        Console.WriteLine(TrimDate(DateTime.Now, TimeSpan.TicksPerHour));
        Console.WriteLine(TrimDate(DateTime.Now, TimeSpan.TicksPerMillisecond));
        Console.WriteLine(TrimDate(DateTime.Now, TimeSpan.TicksPerMinute));
        Console.WriteLine(TrimDate(DateTime.Now, TimeSpan.TicksPerSecond));
        Console.ReadLine();
    }
DateTime dt = new DateTime()
dt = dt.AddSeconds(-dt.Second)

Über Code Sekunden trimmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top