あなたの答えは私がすることにかなり近いですが、日付、時間、分が別々の文字列になっている場合は、次を使用します。
var zoneProvider = DateTimeZoneProviders.Tzdb;
var sourceZone = zoneProvider.GetZoneOrNull("Europe/Brussels");
var targetZone = zoneProvider.GetZoneOrNull("Australia/Melbourne");
if (sourceZone == null || targetZone == null)
{
Console.WriteLine("Time zone not found");
return;
}
var dateParseResult = LocalDatePattern.IsoPattern.Parse(date);
int hourValue, minuteValue;
if (!dateParseResult.Success ||
!int.TryParse(hour, out hourValue) ||
!int.TryParse(minute, out minuteValue))
{
Console.WriteLine("Parsing failed");
return;
}
var localDateTime = dateParseResult.Value + new LocalTime(hour, minute);
var zonedDateTime = localDateTime.InZoneStrictly(sourceZone);
Console.WriteLine(zonedDateTime.ToInstant());
Console.WriteLine(zonedDateTime);
Console.WriteLine(zonedDateTime.WithZone(targetZone));
ここでの唯一の重要な違いは解析です。すべてのビットをくっつけるつもりはありません。文字列を個別に解析するだけです。(私はまた、失敗のために「早期アウト」を好みます:)
InZoneStrictly
入力されたローカル日付/時刻があいまいな場合、間違いなく失敗しますか?の意味に注意する必要があります。