Ваша функция не будет работать из-за псевдонимов.
double roundByCast( double d )
{
double rounded = d;
unsigned char* temp = (unsigned char*) &rounded;
// changing least significant byte to be always the same
temp[0] = 128;
return rounded;
}
Приведение к unsigned char * для temp разрешено, поскольку приведение char * является исключением из правил наложения имен. Это необходимо для таких функций, как read, write, memcpy и т. Д., Чтобы они могли копировать значения в и из байтовых представлений.
Однако, вам не разрешено писать в temp [0], а затем предполагать, что округленное изменилось. Вы должны создать новую двойную переменную (в стеке все нормально) и memcpy temp вернуться к ней.
Я подозреваю, что Ваше значение endDate имеет Добрый набор свойств к DateTimeKind. Локальный.
Можно изменить это на DateTimeKind. Неуказанный следующим образом:
endDate = DateTime.SpecifyKind(endDate, DateTimeKind.Unspecified)
после которого я полагаю, что это будет сериализировано без смещения часового пояса.
Обратите внимание, что Вы получите DateTime с DateTimeKind. Локальный, если Вы инициализировали его использование DateTime. Теперь или DateTime. Сегодня, и DateTimeKind. UTC, если Вы инициализировали его с помощью Даты и времени. UtcNow.
Что Вы используете для генерации даты? При создании этого XML в коде вместо того, чтобы использовать некоторый сериализатор (WCF или XmlSerializer), Вы могли использовать Систему. Xml. XmlConvert, чтобы генерировать и интерпретировать дату следующим образом:
Создать строку, чтобы вставить XML:
DateTime startDate = DateTime.Now;
string startDateString = System.Xml.XmlConvert.ToString(startDate);
Вытащить дату из XML:
DateTime startDateFromXml = System.Xml.XmlConvert.ToDateTime(startDateString);
Если Вы запустите с двух экземпляров DateTime, которые отличаются на 37 минут и за 54 секунды перед продвижением их в XML, то они будут все еще отличаться на 37 минут и спустя 54 секунды после того, как Вы вытащите их из XML.