Я смог найти пример кода, чтобы получить текущую временную метку в эпоху Linux (Секунд с полуночи 1 января 1970 года), однако у меня возникли проблемы с поиском примера того, как рассчитать, что Эпоха будет быть в будущем, скажем, например, через 10 минут, так как я могу рассчитать будущее время в Linux Epoch?Расчет будущей эпохи Время в C#
ответ
Этот метод расширения должен делать эту работу:
private static double GetUnixEpoch(this DateTime dateTime)
{
var unixTime = dateTime.ToUniversalTime() -
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return unixTime.TotalSeconds;
}
И вы можете использовать его в качестве такового:
var unixTime1 = DateTime.Now.GetUnixEpoch(); // precisely now
var unixTime2 = (DateTime.Now + new TimeSpan(0, 10, 0)).GetUnixEpoch(); // 10 minutes in future
Обратите внимание, что вам придется иметь дело со всеми дата-время в UTC (Universal Time), так как определено, как начинается Unix Epoch.
Обратите внимание, что ToUniversalTime() обрабатывает время с помощью Unspecified Kind как локального, что может быть или не быть правильным для вашего приложения. Вот почему всегда лучше указывать Kind при создании DateTime. См. Http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx –
@Matthew: Да, хорошая точка (хотя не стоит беспокоиться о том, что вы просто используете время относительно Now). Однако вам все равно нужно конвертировать в UTC. – Noldorin
Итак, я наконец-то прочитал ваш код и понял его. Хотел бы я проголосовать за это еще раз. Спасибо :) – UnkwnTech
Основной раствор:
- Take Текущее время
- Добавить Offset в будущее (10 минут, в вашем примере)
- Вычесть полночи 1 янв 1970
- Получить общее количество секунд между двумя
в C# (с верхней части моей головы, непроверенных):
DateTime myEpoch = DateTime.Now.Add(new TimeSpan(...));
return myEpoch.Subtract(new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
Какую функцию вы используете для получения текущего времени?
Конечно, что принимает параметр .NET DateTime ...
Конечно, это всего лишь простой вопрос, переходящий в будущем DateTime функции.
или делать DateDiff в секундах между текущим временем и будущим временем и добавлять это.
var dt = new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
var now = System.DateTime.Now.ToUniversalTime();
var future = new DateTime(2010, 1, 1).ToUniversalTime();
Console.WriteLine((now - dt).TotalSeconds);
Console.WriteLine((future - dt).TotalSeconds);
Это нужно сделать в UTC, но в остальном это правильно. – Noldorin
Cheers, обновленный для пояснения –
Существует интересный поворот, когда вы хотите узнать время эпохи Unix в .Net в системе Windows.
Для почти всех практических случаях и при условии, текущее время мимо Unix Epoch вы могли действительно взять
System.TimeSpan timeDifference = DateTime.UTCNow -
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
long unixEpochTime = System.Convert.ToInt64(timeDifference.TotalSeconds);
Но,
Unix Epoch время определяется как»... система для описания время, определенное как количество секунд, прошедших с полуночи. Скоординированное всеобщее время (UTC) от 1 января 1970 года, , не считая секунд прыжка. " (1)
С 1972 года UTC включает в себя «прыжковые секунды», и до сих пор у нас было в общей сложности 25 из них. (2)
.Net DateTime не имеет резервов для Leap Seconds, но будет просто полагаться на время ОС. Windows блаженно не знает о прыжках секунд (3) (4), и поэтому просто будет иметь представление о времени, когда он получает его от своего ведущего NTP (я считаю, что по умолчанию для не подключенного к домену компьютера - time.windows.com) , который, вероятно, обслуживает UTC, включая секунды прыжка.
Это означает, что для того, чтобы быть педантичным правилом относительно реального количества секунд, прошедших с эпохи Unix, вы, вероятно, должны добавить секунды прыжка к результату, полученному выше, для приложений, которые полагаются на это. Вам нужно будет отслеживать количество секунд, которое нужно добавить каждый раз, поскольку секунды прыжка не объявляются заранее (2). Однако, поскольку определение Unix Epoch Time явно исключает секунды прыжка, вы можете спокойно проигнорировать это и просто пересчитать секунды с текущего времени UTC.
Иногда прыжки секунд вызывают погрешность программного обеспечения (5). Продолжается дискуссия о том, следует ли продолжать или отменять практику (6) (7) (8).
Последний прыжок второй в момент ответа произошел на 1 июля 2012 года (9) и вызвало проблемы для различных сайтов и приложений (10)
(1) http://en.wikipedia.org/wiki/Unix_time
(2) http://en.wikipedia.org/wiki/Leap_second
(3) http://support.microsoft.com/kb/909614
(4) http://www.meinberg.de/english/info/leap-second.htm
(5) http://www.networkworld.com/news/2009/010609-leap-second-snafu-affects-oracle.html
(6) http://www.pcworld.idg.com.au/article/358024/time_waits_no_one_leap_seconds_may_cut/
(7) http://queue.acm.org/detail.cfm?id=1967009
(8) http://arxiv.org/abs/1106.3141
(9) http://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat
(10) http://arstechnica.com/business/2012/07/one-day-later-the-leap-second-v-the-internet-scorecard/
(Первоначальный ответ был ошибкой, что было к счастью пойманные комментаторами Эдвардом Брей и Мормегилом ниже)
+1 потому что это интересно, однако, поскольку я работаю по шкале минут (больше всего часов в большинстве случаев), и операции не слишком точны, я не думаю, что 24 секунды чтобы быть большой проблемой, но спасибо за указание на это. – UnkwnTech
Я не думаю, что это правильно. Оба предположения прекрасны (Unix и Windows оба не считают/знают секунды прыжка), но вы делаете неверный вывод, ИМХО. Время Unix игнорирует секунды прыжка, что означает, что «1973-01-01T00: 00: 00Z» - это время Unix 94694400, то есть '(365 + 366 + 365) * 24 * 60 * 60', хотя прошло два прыжковых секунды тем временем. И то же самое верно для Windows. Он знает, что у мастера NTP это '1973-01-01T00: 00: 00Z', но он не знает о двух секундах.Время Unix & Windows - это не непрерывный масштаб времени, но они синхронизированы друг с другом. – Mormegil
Вот почему я сказал «педантично правильно». Мы сравниваем официальное определение времени Unix Epoch, а не практическую реализацию в системе Unix, которая, как вы указываете, находится в той же лодке, что и Windows. –
- 1. Расчет будущей эпохи Время в C
- 2. Расчет будущей даты
- 3. Расчет миллисекунд от эпохи
- 4. Как вы конвертируете время эпохи в C#?
- 5. Добавить время эпохи с миллисекундами до эпохи дата/время?
- 6. PostgresSQL время эпохи преобразование
- 7. какое время эпохи это
- 8. Форматирование время эпохи
- 9. рассчитать время эпохи в iPad
- 10. Как преобразовать время эпохи в строку времени
- 11. Расчет времени между фактической датой и будущей датой непрерывно
- 12. Perl: Как получить время эпохи
- 13. MySQL Время против эпохи сравнения
- 14. Javascript преобразовать время эпохи формат
- 15. Расчет будущей позиции мяча, который может отскакивать от стен
- 16. Определить флаг DST будущей даты в C
- 17. эпохи
- 18. Расчет дней, оставшихся между двумя значениями времени эпохи JavaScript?
- 19. Преобразование эпохи в «настоящую» дату/время
- 20. конвертировать время в формат времени эпохи
- 21. Время в MySQL между двумя столбцами эпохи
- 22. Как ограничить время эпохи в Thingworx
- 23. время эпохи в курсе текущего года
- 24. Glib преобразовать время эпохи в строку
- 25. Время печати с эпохи в наносекундах
- 26. Конвертировать список из эпохи в человекообразное время
- 27. Bash преобразовать два Эпохи в оставшееся время
- 28. Расчет количества дней и часов между сегодняшней и будущей датой
- 29. Дата и время, как вы получаете время Эпохи?
- 30. Время проскальзывания LookBack Расчет
Вы заявили, что «как рассчитать, что будет в Эпохе в будущем, скажем, например, через 10 минут», сбивает с толку. Эпоха Unix всегда 01.01.1970 00:00:00, даже через 10 минут! Вы имеете в виду «как рассчитать количество секунд с момента, когда Unix Epoch будет в будущем, скажем, например, через 10 минут». –