web-dev-qa-db-ja.com

サーバーから現在の日時を取得し、C#で現地時間に変換します

ヘルプ:GMT-07.00時間のサーバーがあります。私の現地時間はGMT + 05.30時間です。サーバーから現在の日付と時刻を取得し、この日付と時刻を現地時間に変換する必要があります。私は多くのコードを試しましたが、それでもこれを行うための連続した方法を見つけられませんでした。誰かが私を助けてくれませんか。

string zoneId = "India Standard Time";
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(zoneId);
DateTime result = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi);
DateTime cu = result.ToUniversalTime();
DateTime cur = cu.ToLocalTime();

上記のすべての方法を試しましたが、それでも正しい答えが得られません。現在の現地時間が2014年3月9日12:51:00 PMであるとすると、サーバー時間は現地時間とは12.30時間異なります。つまり、現地時間から12時間30分を引いて、サーバー時間を取得します。サーバー時間から現地時間を取得する必要があります。どうすれば達成できますか?私にいくつかの解決策を提案してください..あなたの答えを事前に感謝します

5
njnjnj

サーバーのタイムゾーンを知る必要はありません。サーバーの時間設定が正しい場合は、これを試すことができます:

DateTime serverTime = DateTime.Now; // gives you current Time in server timeZone
DateTime utcTime = serverTime.ToUniversalTime(); // convert it to Utc using timezone setting of server computer

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, tzi); // convert from utc to local

ローカルで確認するには、サーバーに一致するようにコンピューターのタイムゾーンを変更します。次に、コードを実行します。確認したところ、正常に動作しています。

更新:

最初の2行は、以下のように1行に混在させることができます。それはより良いパフォーマンスを持っています:

DateTime utcTime = DateTime.UtcNow;
9

サーバー時間に12時間30分を追加して同等の現地時間を取得する場合(サーバー時間があれば)、AddHours()関数とAddMinutes()関数を使用して12を追加できます。 30時間

これを試して:

DateTime dt= /*your server time*/;
dt=dt.AddHours(12);
dt=dt.AddMinutes(30);
1

サーバーの時計が(タイムゾーンに関係なく)正しく設定されている場合、独自のコードの最初の3行は正確に正しいです。 result変数には、インドのタイムゾーンの現地時間が含まれています。

最後の2行を省略してください。

0
Matt Johnson
 DateTime serverTime = DateTime.Now;

 DateTime utcTime = serverTime.ToUniversalTime(); 

// convert it to Utc using timezone setting of server computer

 TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

 DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, tzi); 

// convert from utc to local
0
Sudarshan Kate

それで、あなたはサーバーの時間を持っています、そしてあなたはサーバーのタイムゾーンを知っていますか?次に、次のように現地時間を取得できます。

//Server: 09-Mar-2014 11:00:00 AM:
var serverTime = new DateTime(2014, 3, 9, 11, 00, 00);

var serverZone = TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time");
var localZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

var localTime = TimeZoneInfo.ConvertTime(serverTime, serverZone, localZone);
// => 09-Mar-2014 11:30:00 PM
0
Sphinxxx

サーバーのUTC日付と時刻を取得する最も簡単な方法は、(SELECT GETUTCDATE();)です。それを試してみてください。

0
Hashim Shubber