C# analysiert DateTime in einer bestimmten Zeitzone, wenn kein Offset angegeben wird
Posted: 03 Jan 2025, 03:49
Ich habe eine Dienstprogrammmethode, die versucht, eine Datums-/Uhrzeitzeichenfolge in eine Datums-/Uhrzeitangabe zu analysieren. Ein Teil davon ist unten.
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.
Diese Behauptung schlägt auf dem Build-Agenten fehl:
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?
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();
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);
Code: Select all
Assert.AreEqual(14, hl7DateTime.Value.Hour);
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?