Попытка преобразовать DateTime + часовой пояс в DateTimeOffset местного часового поясаC#

Место общения программистов C#
Ответить
Anonymous
 Попытка преобразовать DateTime + часовой пояс в DateTimeOffset местного часового пояса

Сообщение Anonymous »

Я пытаюсь преобразовать жестко запрограммированное значение DateTime в DateTimeOffset, но локализованное в указанном часовом поясе.
Учитывая жестко закодированное значение DateTime: DateTime someUtcDateTime = new(2022, 1, 1, 12, 0, 0); и часовой пояс «Америка/Нью_Йорк», я получаю результат: 2022-01-01 12:00:00 -05:00
Я думал, что ответ должен быть таким: 2022-01-01 7:00:00 -05:00
Я ошибаюсь в ожидаемом ответе?
Вот код C#, который я пытался:
(Примечание: я ссылаюсь на пакет Nuget TimeZoneConverter, чтобы помочь мне)
public static DateTimeOffset ToLocalDateTimeOffset(
this DateTime utcDateTime,
string? locationTimeZone,
string defaultTimezoneIfNoneProvided = CommonConstants.SYDNEY_TIMEZONE)
{
if (string.IsNullOrWhiteSpace(defaultTimezoneIfNoneProvided))
{
throw new Exception("Default timezone must be provided.");
}

var timeZone = GetTimeZoneInfo(locationTimeZone, defaultTimezoneIfNoneProvided);

// Convert the provided utc time into the local time.
var localDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, timeZone);

// Now convert the local time to a DateTimeOffset.
var localDateTimeOffset = new DateTimeOffset(utcDateTime, timeZone.GetUtcOffset(utcDateTime));

return localDateTimeOffset;
}

public static class DateTimeExtensionTestHelpers
{
public static readonly DateTime SomeUtcDateTime = new(2022, 1, 1, 12, 0, 0);

public const string NewYorkTimeZone = "America/New_York";

public const string SydneyTimezone = CommonConstants.SYDNEY_TIMEZONE;

public static TimeSpan ToUtcOffset(string timeZoneId)
{
var timezone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);

return timezone.GetUtcOffset(SomeUtcDateTime);
}
}

[Fact]
public void ToLocalDateTime_GivenATimeZone_ShouldReturnALocalDateTimeForTheProvidedTimeZone()
{
// Arrange
var utcOffset = DateTimeExtensionTestHelpers.ToUtcOffset(DateTimeExtensionTestHelpers.NewYorkTimeZone);

var expectedDateTime = DateTimeExtensionTestHelpers.SomeUtcDateTime + utcOffset;

// Act
var result = DateTimeExtensionTestHelpers.SomeUtcDateTime.ToLocalDateTime(
DateTimeExtensionTestHelpers.NewYorkTimeZone,
DateTimeExtensionTestHelpers.SydneyTimezone);

// Assert
result.ShouldBe(expectedDateTime);
}



Подробнее здесь: https://stackoverflow.com/questions/779 ... l-timezone
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»