Как получить сегодняшнюю 9:00 PST эпоху в C#

Я хочу знать, сколько секунд прошло с 1970/1/1 до сегодняшнего 9:00 по тихоокеанскому времени. Как я могу сделать это в C#?

Мне это нужно во внешнем приложении, где у каждого устройства может быть свой часовой пояс. Но в любом случае мне нужны секунды, прошедшие с часового пояса PST текущего дня.

2 ответа

    TimeZoneInfo destTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
    int timeZoneDiffSeconds = (int) destTimeZone.BaseUtcOffset.Subtract(TimeZoneInfo.Local.BaseUtcOffset).TotalSeconds;

    DateTime todayLocal9Am = DateTime.Today.Date + new TimeSpan(9, 0, 0);

    Int32 unix9AmLocalTime = (Int32) (todayLocal9Am.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
    Int32 unix9AmPstTime = unix9AmLocalTime - Math.Abs(timeZoneDiffSeconds);

    Console.WriteLine(unix9AmPstTime);

    Console.Read();

Если ваш сервер настроен на использование времени PST, то вы можете сделать следующее

Идет так:

  TimeSpan test = DateTime.Now - new DateTime(1970, 01, 01);
  MessageBox.Show(test.TotalSeconds.ToString());

Для одного лайнера:

 MessageBox.Show((DateTime.Now - new DateTime(1970, 01, 01))
     .TotalSeconds.ToString());

Если вы не можете гарантировать, что PST используется на компьютере, на котором будет выполняться ваш код, вы можете указать часовой пояс следующим образом.

var zone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var utcNow = DateTime.UtcNow;
var pacificNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, zone);
MessageBox.Show((pacificNow  - new DateTime(1970, 01, 01))
     .TotalSeconds.ToString());

Надеюсь это поможет

Другие вопросы по тегам