2014-02-11 8 views
5

Ich habe eine "Anforderung", einen Zeitstempel auf die nächste Sekunde zu geben ... aber NICHT genauer. Runden oder Abschneiden der Zeit ist in Ordnung.Lassen Sie datetime.now zur nächsten Sekunde zurückkehren

Ich habe mit diesem Gräuel

dateTime = DateTime.Parse(DateTime.UtcNow.ToString("U")); 

(U ist das Langformat Datum und Uhrzeit. „3. Januar 2007 17.25.30“)

einig weniger schreckliche Art und Weise von kommen Gibt es das erreichen?

Edit: Also aus der verknüpften truncate Millisekunden Antwort (dank John Odom) Ich werde diese

private static DateTime GetCurrentDateTimeNoMilliseconds() 
     { 
      var currentTime = DateTime.UtcNow; 
      return new DateTime(currentTime.Ticks - (currentTime.Ticks % TimeSpan.TicksPerSecond), currentTime.Kind); 
     } 

kaum weniger schrecklich tun .. aber es die ‚Art‘ von Datetime nicht bewahrt, die ich Pflege Über. Meine Lösung nicht.

+1

Sind Sie sicher, dass dies C ist? – devnull

+0

Das ist definitiv nicht 'C' –

+0

Das hat nichts mit C zu tun. In welcher Sprache arbeiten Sie? In C können Sie immer 'time' /' ctime' verwenden. –

Antwort

19

Sie könnten dies als eine Erweiterung Methode implementieren, die Sie zu trimmen erlaubt Datetime zu einer spezifizierten Genauigkeit gegeben, um die zugrunde liegenden Ticks mit:

public static DateTime Trim(this DateTime date, long ticks) { 
    return new DateTime(date.Ticks - (date.Ticks % ticks), date.Kind); 
} 

Dann ist es einfach, Ihr Datum zu allen Arten von Genauigkeiten zu trimmen, wie so:

DateTime now = DateTime.Now; 
DateTime nowTrimmedToSeconds = now.Trim(TimeSpan.TicksPerSecond); 
DateTime nowTrimmedToMinutes = now.Trim(TimeSpan.TicksPerMinute); 
1

Versuchen Sie, diese

TimeSpan span= dateTime.Subtract(new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc)); 
return span.TotalSeconds; 
1

Sie this Konstruktor verwenden:

public DateTime(
    int year, 
    int month, 
    int day, 
    int hour, 
    int minute, 
    int second 
) 

so wäre es:

DateTime dt = DateTime.Now; 
DateTime secondsDt = new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second); 
2

Wenn Sie wirklich die Zeit, um das zu Runde wollen nächste Sekunde können Sie verwenden:

DateTime.MinValue 
     .AddSeconds(Math.Round((DateTime.Now - DateTime.MinValue).TotalSeconds)); 

jedoch, es sei denn, dass zusätzliche halbe Sekunde wirklich einen Unterschied macht, können Sie nur den Millisekunden-Abschnitt entfernen:

DateTime.Now.AddTicks(-1 * (DateTime.Now.Ticks % TimeSpan.TicksPerSecond)); 
Verwandte Themen