私の最初のポスト次のとおりです。私はNodaTimeを使用して、ローカルおよびUTC(両方の方法)の間の日付/時刻を変換する簡単な方法を見つけるのに苦労していNodaTimeのコンバージョン(パート2)の仕方?
DateTime conversions using NodaTime on ASP.Net MVC 3 Razor website. How to?
。
現在の画像です:
- 私は、データベース内のUTCとして保存された日付/時間を持っています。
- これをユーザーに表示する際には、現地時間帯を考慮してそれに合わせて変換する必要があります。
- ユーザーがフィルタとして日付/時刻を指定すると、SQLクエリに送信する前に、その日付をUTCに変換する必要があります。
私がこれまで持っている:UTCからローカルに変換する
拡張(この部分は正常に動作している):
public static DateTime UTCtoLocal(this DateTime dateTime)
{
IDateTimeZoneProvider timeZoneProvider = DateTimeZoneProviders.Tzdb;
var utcTimeZone = timeZoneProvider["UTC"];
var dateTimeFromDb = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Millisecond);
var zonedDbDateTime = utcTimeZone.AtLeniently(LocalDateTime.FromDateTime(dateTimeFromDb));
var usersTimezoneId = "Europe/London"; //just an example
var usersTimezone = timeZoneProvider[usersTimezoneId];
var usersZonedDateTime = zonedDbDateTime.WithZone(usersTimezone);
return usersZonedDateTime.ToDateTimeUnspecified();
}
拡張UTCに地元の後ろから変換するには(この一部は問題です):
public static DateTime LocaltoUTC(this DateTime dateTime)
{
IDateTimeZoneProvider timeZoneProvider = DateTimeZoneProviders.Tzdb;
var usersTimezoneId = "Europe/London";
var usersTimezone = timeZoneProvider[usersTimezoneId];
var dateTimeFromDb = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Millisecond);
var zonedDbDateTime = usersTimezone.AtLeniently(LocalDateTime.FromDateTime(dateTimeFromDb));
var utcTimezoneId = "UTC";
var utcTimezone = timeZoneProvider[utcTimezoneId];
var utcZonedDateTime = zonedDbDateTime.WithZone(utcTimezone);
return utcZonedDateTime.ToDateTimeUtc();
}
私はここで間違っていますか?
ありがとう、もう一度@Jon。これを試してみる。 NodaTimeの良い仕事に気をつけてください。 – melancia
LocaltoUTCの使い方は?DateTime.ToUniversalTime()はうまくいきませんか?ありがとうございます – pajics
@pajics:いいえ、それは常にシステムのタイムゾーンを使用するため、OPはユーザーのタイムゾーンを使用したいからです。 –