Neu in .NET 9.0 [13]: Mehr Genauigkeit fĂĽr TimeSpan

Die Zeitkonvertierungsmethoden haben in .NET 9.0 neue Ăśberladungen fĂĽr mehr Genauigkeit erhalten.

In Pocket speichern vorlesen Druckansicht

(Bild: Pincasso/Shutterstock.com)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Die Datenstruktur System.TimeSpan gibt es schon seit der ersten Version des .NET Frameworks aus dem Jahr 2002. In .NET 9.0 adressiert Microsoft jetzt eine kleine Herausforderung, die es in all den Jahren gab: Die Konvertierungsmethoden FromMicroseconds(), FromSeconds(), FromMinutes(), FromHours() und FromDays() erwarten als Parameter einen Double-Wert, der als FlieĂźkommazahl aber ungenau ist.

Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

Microsoft führt daher in .NET 9.0 zusätzlich neue Überladungen dieser Methoden ein, die Ganzzahlen – int beziehungsweise long – als Parameter erwarten:

  • public static TimeSpan FromDays(int days);
  • public static TimeSpan FromDays(int days, int hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0);
  • public static TimeSpan FromHours(int hours);
  • public static TimeSpan FromHours(int hours, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0);
  • public static TimeSpan FromMinutes(long minutes);
  • public static TimeSpan FromMinutes(long minutes, long seconds = 0, long milliseconds = 0, long microseconds = 0);
  • public static TimeSpan FromSeconds(long seconds);
  • public static TimeSpan FromSeconds(long seconds, long milliseconds = 0, long microseconds = 0);
  • public static TimeSpan FromMilliseconds(long milliseconds, long microseconds = 0);
  • public static TimeSpan FromMicroseconds(long microseconds);

Das folgende Beispiel beweist die größere Genauigkeit der neuen Überladungen am Beispiel FromSeconds():

public class FCL9_TimeSpanFrom
{
 public void Run()
 {
  CUI.Demo(nameof(FCL9_TimeSpanFrom));
 
  // bisher
  TimeSpan timeSpan1a = TimeSpan.FromSeconds(value: 123.456);
  Console.WriteLine($"TimeSpan +123.456sec alt = {timeSpan1a}"); 
  // 00:02:03.4560000
 
  // bisher
  TimeSpan timeSpan2a = TimeSpan.FromSeconds(value: 101.832);
  Console.WriteLine($"TimeSpan +101.832sec alt = {timeSpan2a}"); 
  // 00:01:41.8319999
 
  Console.WriteLine();
 
  // neu
  TimeSpan timeSpan1n = TimeSpan.FromSeconds(seconds: 123, 
                                             milliseconds: 456);
  Console.WriteLine($"TimeSpan +123.456sec neu = {timeSpan1n}"); 
  // 00:02:03.4560000
 
  // neu
  TimeSpan timeSpan2n = TimeSpan.FromSeconds(seconds: 101, 
                                             milliseconds: 832);
  Console.WriteLine($"TimeSpan +101.832sec neu = {timeSpan2n}"); 
  // 00:01:41.8320000
 }
 
}

Der zweite Wert ist in der alten Form ungenau, aber in der neuen genau.

(Bild: Screenshot (Holger Schwichtenberg))

(rme)