Фактическая версия jxl не может этого сделать. У меня та же проблема, и я только что отладил jxl. Jxl правильно читает запись для формата даты 1904 года, но не записывает ее. Он всегда записывает формат даты 1900 как константу.
Я вижу следующие решения:
1) Измените библиотеку jxl, чтобы она могла записывать формат даты 1904 года. Это должно быть не так сложно. В методе WritableWorkbookImpl.write()
необходимо изменить строку
NineteenFourRecord nf = new NineteenFourRecord(false);
значение параметра false
до true
для формата даты 1904 года.
В приватном методе DateRecord.calculateValue(boolean)
вы должны изменить строку
value = utcDays + utcOffsetDays;
путем замены utcOffsetDays
другой константой с числом дней на четыре года меньше для формата даты 1904 года.
Возможно, есть и другие места, которые можно изменить (особенно если сделать красивое решение с форматом 1904 как свойством рабочей книги), но это то, что относится к моей программе. Также обратите внимание на обязательства LGPL при продаже вашей программы.
2) Более простое решение: всегда помещайте положительные значения времени в ячейки и сохраняйте знак в формате ячейки. Например, используйте формат "[h]:mm:ss"
для положительных значений и "-[h]:mm:ss"
для отрицательных значений.
Недостаток решения 2): Мысль выглядит идеально, - это положительное значение в ячейке, которое подразумевается как отрицательное, и при выполнении вычислений результаты могут быть неверными.