2017-07-12 11 views
0

現在の年+ 1深夜の日付時刻をunixタイムスタンプに変換しようとしています。私は 1 +年の深夜の時刻をUNIXのミリ秒に変換する

DateTime currentTime = DateTime.Today; 
DateTime yearEnd = new DateTime(currentTime.Year, 1,1,currentTime.Minute,currentTime.Hour,currentTime.Second,DateTimeKind.Local); 

yearEnd = yearEnd.AddYears(1); 

double t = (yearEnd.ToUniversalTime() - new DateTime(1970, 1, 1,0,0,0)).TotalMilliseconds; 

とコード上記

を試してみましたが、そのための

それは私は何を期待していているがMon Jan 01 2018 00:00:00現地時間に時間を変換中1514782800000すなわちMon Jan 01 2018 05:00:00 UTCMon Jan 01 2018 10:30:00 Local(インド)を返している

答えて

1

デフォルトではDateTimeUnspecifiedDateTimeKindを作成します。したがって、UTCを明示的に使用すると混乱を避けることができます。あなたが戻ってあなたが使用することDateTimeにタイムスタンプを変換する必要がある場合には

:私は出力がGMT: Monday, 1 January 2018 00:00:00

Updateに変換し1514764800000で、このように

DateTime currentTime = DateTime.UtcNow; 
    DateTime yearEnd = new DateTime(currentTime.Year, 1,1,0,0,0, DateTimeKind.Utc); 

    yearEnd = yearEnd.AddYears(1); // output DateTime has Utc Kind 

    var unixTimestamp = (yearEnd.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))).TotalMilliseconds; 

    Console.WriteLine(unixTimestamp); 

を書き換えるために試してみました以下:

public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) 
{ 
    System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc); 
    dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp); 
    return dtDateTime; // still Utc Kind 
} 

conv他のタイムゾーンにERT:私は右のあなたを理解していれば

TimeZoneInfo infotime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time (Mexico)"); // specify your desired timezone here 
    Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(UnixTimeStampToDateTime(unixTimestamp), infotime)); 
+0

とどのように現地の時間にそれを得るためには改善されましたか?私はDateTimeKind.Local – Hunt

+0

を使用しますか?「現地時間に入る」とはどういう意味ですか? unixタイムスタンプは絶対であり、タイムゾーンに依存しません。日付を手動化/変換するときは、常にUTCを使用します。最後に、希望のタイムゾーンに日付を変換します – Artem

+0

私はアプリケーションのyearEnd時間に基づいてalramを設定したいので、ローカルタイムゾーンを要求していました – Hunt

0

次のことをしたい:

double result = new DateTime(currentTime.Year + 1, 1, 1, 0, 0, 0, DateTimeKind.Local).Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds; 

それとも可読性

DateTime newYear = new DateTime(currentTime.Year + 1, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
DateTime uTSBegin = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
double result2 = newYear.Subtract(uTSBegin).TotalSeconds; 
関連する問題