by Guest » 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.
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?
Ich habe eine Dienstprogrammmethode, die versucht, eine Datums-/Uhrzeitzeichenfolge in eine Datums-/Uhrzeitangabe zu analysieren. Ein Teil davon ist unten.
[code] if (dateTime is { Kind: DateTimeKind.Unspecified, TimeOfDay.Ticks: > 0 })
{
var cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
dateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, cst);
}
return dateTime.ToUniversalTime();
[/code]
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] 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]
Diese Behauptung schlägt auf dem Build-Agenten fehl:
[code]Assert.AreEqual(14, hl7DateTime.Value.Hour);[/code]
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?