Не совсем верно, что экземпляры DateTime (структуры) не несут информацию TimeZone. В каждой структуре DateTime есть свойство DateTimeKind , начиная с .NET ... 3.0? Я не знаю версию. «Вид» - это UTC, Локальный или Не указано. поэтому, хотя это и не является часовой пояс как таковой, это указание на то, что время выражается либо в локальной зоне, либо в универсальной временной зоне. Проверьте документ для получения дополнительной информации.
Чтобы ответить на исходный вопрос - переведите всех в один стандартный часовой пояс. UTC работает просто отлично, и это легко, потому что в BCL есть встроенные методы, но не имеет значения, какой часовой пояс вы выберете. Просто заставьте всех договориться о стандарте.
Еще одна вещь, которую вы можете сделать, это передать значения времени в виде значений "TotalSeconds", так как ... определенное время в прошлом. Как 1 января 1970 года (unix time_t) или 1 января 1601 года (windows FILETIME). Но при таком подходе подразумевается, что все сотрудничающие стороны согласны с тем, что этот начальный момент времени - UTC. Таким образом, один миллион секунд с начала («эпоха») относится к одному и тому же моменту, нахожусь ли я в Эль-Пасо, или в Нашуа, или в Токио, или в Лондоне.