Page 1 of 1

C# analysiert DateTime in einer bestimmten Zeitzone, wenn kein Offset angegeben wird

Posted: 03 Jan 2025, 03:49
by Guest
Ich habe eine Dienstprogrammmethode, die versucht, eine Datums-/Uhrzeitzeichenfolge in eine Datums-/Uhrzeitangabe zu analysieren. Ein Teil davon ist unten.

Code: Select all

 if (dateTime is { Kind: DateTimeKind.Unspecified, TimeOfDay.Ticks: > 0 })
{
var cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
dateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, cst);
}
return dateTime.ToUniversalTime();
Manchmal wurde für die zu analysierenden Zeichenfolgen kein Zeitzonen-Offset angegeben. Aber sie sind implizit Central Standard Times. Beispielsweise sollte dieser Zeichenfolgenwert „20241010091157“ 10.10.2024 09:11:57 CST lauten. Meine Dienstprogrammmethode versucht, die Zeitzone für Datumsangaben festzulegen, für die kein Typ angegeben ist, die aber dennoch Zeitwerte haben.
Der folgende Komponententest besteht, wenn ich ihn lokal auf einem Computer in CST-Zeit ausführe Zone, schlägt jedoch fehl, wenn ich den Build-Agenten ausführe.

Code: Select all

    message.PV1.AdmitDateTime.Time.Value = "20241010091157";

var hl7DateTime = hl7Utils.GetHl7DateTimeUtc(message.PV1.AdmitDateTime);
Assert.IsNotNull(hl7DateTime);
Assert.AreEqual(2024, hl7DateTime.Value.Year);
Assert.AreEqual(10, hl7DateTime.Value.Month);
Assert.AreEqual(10, hl7DateTime.Value.Day);
Assert.AreEqual(14, hl7DateTime.Value.Hour);
Assert.AreEqual(11, hl7DateTime.Value.Minute);
Assert.AreEqual(57, hl7DateTime.Value.Second);
Assert.AreEqual(hl7DateTime.Value.Kind, DateTimeKind.Utc);
Diese Behauptung schlägt auf dem Build-Agenten fehl:

Code: Select all

Assert.AreEqual(14, hl7DateTime.Value.Hour);
Fehler: Assert.AreEqual fehlgeschlagen. Erwartet:. Tatsächlich:
Was ist der richtige Weg, um eine Zeichenfolge in eine Datums-/Uhrzeitangabe zu analysieren und die Zeitzone als Standard festzulegen, wenn diese nicht in der analysierten Zeichenfolge angegeben ist?