Сравните DateTime тики на двух машинах - PullRequest
1 голос
/ 12 июня 2010

Можно ли сравнить два FileInfo.CreationTimeUtc.Ticks из двух файлов на двух разных компьютерах, чтобы определить, какая версия новее - или есть ли лучший способ?

Зависят ли тики от времени ОС или онидействительно физические тики с какой-то фиксированной даты в прошлом?

Ответы [ 5 ]

1 голос
/ 13 июня 2010

Короткий ответ: нет, это нереальное решение, по крайней мере, не в теоретическом мире, который может что-то случиться.

Часы компьютера могут быть с точностью до миллиардноймиллиардной доли секунды, но проблема не в точности, а в том, синхронизированы ли часы двух компьютеров.

Вот эксперимент.Посмотрите на часы, а затем спросите случайного незнакомца вокруг вас, который час.Если ваш файл был записан на ваш компьютер, когда вы смотрели на часы, и был записан на компьютер, принадлежащий человеку, которого вы спрашиваете 1 секунду назад, будет ли ваше сравнение определять, что ваш файл или его / ее файл был более новым?

Теперь ваше решение может работать, если предположить, что:

  • Вам не нужно сравнивать различные значения часов в миллисекундах или наносекундах
  • Часырассматриваемые компьютеры синхронизируются с неким общим источником ** или, по крайней мере, установлены так близко друг к другу, насколько позволяют критерии неточности

В зависимости от ваших требований, я бы серьезнопопытайтесь найти другой способ убедиться, что вы получаете правильное значение.

1 голос
/ 12 июня 2010

Тики зависят от времени ОС или они действительно физические тики от некоторых фиксированных дата в прошлом?

Тики практически не зависят от ОС. Если я правильно помню, 1 секунда = 10000000 тиков.

Итак, в любое время, когда вы проверяете, вы получаете от Ticks примерно в десять миллионов раз больше, чем от TotalSeconds. (Хотя это более точно, чем TotalSeconds, очевидно.)
Тик - это наименьшая единица времени, которую вы можете измерить в .NET.

Что касается UTC, да, это так хорошо, как вы можете получить. Если системное время на компьютере, на котором работает ваше приложение, достаточно точно, вы справитесь с ним без проблем.

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

1 голос
/ 12 июня 2010

Цель времени UTC заключается в том, что оно будет универсальным, но на обоих компьютерах должны быть синхронизированные часы, чтобы можно было просто сравнивать тики.Например, если оба наших компьютера обновили файл в один и тот же момент (без относительности), они могли бы записывать разное время - это не значит, что компьютеры имеют встроенные атомные часы.

Конечно, ониможет синхронизировать время с NTP и т. д., чтобы быть довольно близко друг к другу.Трудно сказать, достаточно ли это для ваших целей, без дополнительной информации.Вам также следует учитывать возможность того, что пользователи намеренно будут связываться со своими системными часами - может ли это вызвать проблемы для вашего варианта использования?

0 голосов
/ 12 июня 2010

Исходя из того, как вы сформулировали вопрос, я предполагаю, что по какой-то причине вы не можете вызвать методы сравнения DateTime. Предполагая это, страница msdn для свойства тиков гласит: «Один тик представляет сто наносекунд или одну десятую миллионную секунды. В миллисекунде есть 10 000 тиков». Таким образом, отметки относятся к значению, назначенному библиотекой .NET, и не зависят от компьютера / ОС (например, Windows, поскольку вы используете C #) и могут безопасно использоваться для сравнения.

0 голосов
/ 12 июня 2010

Если вы говорите о произвольных файлах, то ответ о UTC стоит попробовать. Часы должны быть одинаковыми.

Если у вас есть контроль над файлами и машинами, которые их записывают, я бы написал номер версии в начале файла. Тогда вы можете сравнить номер версии. Вам нужно будет узнать, как получить уникальные номера версий, если две машины пишут файл независимо. Чтобы решить эту проблему, может быть реализована версия веб-сервиса, которую используют обе машины.

Некоторые форматы файлов имеют встроенную информацию о версии, а также отметки времени. Например, форматы Microsoft Office. Затем вы можете использовать внутреннюю информацию, чтобы решить, какая из них была самой новой. Но вы также можете столкнуться с конфликтом версий.

...