2014-01-13 2 views
0

Я читаю электронную таблицу Excel с помощью JXL и Groovy, как это:Почему JXL дает мне дату с предыдущего дня?

WorkbookSettings settings = new WorkbookSettings(); 
settings.encoding = "Cp1252" 
settings.locale = new Locale("pt", "BR") 
Workbook workbook = Workbook.getWorkbook(is, settings) 
Sheet sheet = workbook.getSheet(0) 

А то у меня есть ячейки в Excel, значение которого является 09/01/2013 (дд/мм/гггг). Но тогда, когда я получить содержимое ячейки, JXL автоматически делает некоторые преобразования и дает это на меня:

"09/01/13" == sheet.getCell(col, line).contents?.trim() 

Но тогда, когда я бросил Cell к DateCell, представление Дата «09/01/13 »становится 8 января 2013 года (!):

DateCell dc = ((DateCell) sheet.getCell(col, line)) 
println "date from JXL: ${dc.date}" // prints Tue Jan 08 22:00:00 BRST 2013 

У кого-нибудь есть идеи, как исправить это? Если бы я мог просто напрямую загрузить фактическое содержимое ячеек (09/01/2013), тогда я мог бы сделать все конверсионные данные самостоятельно.

Спасибо!

+0

похоже, это превращение его в 'BRST' что на 2 часа меньше, чем по Гринвичу, так что это дает вам день до 10 вечера –

ответ

1

От: http://www.andykhan.com/jexcelapi/tutorial.html#dates

При отображении даты, пакет java.util автоматически настраивает для локального часового пояса. Это может вызвать проблемы при отображении дат в приложении, поскольку даты выглядят так, как будто они ровно на один день раньше, чем в электронной таблице Excel, хотя на самом деле это не так.

...

Самый простой способ обойти это (и метод метод используется внутри getContents() из jxl.DateCell), чтобы заставить часовой пояс формат даты следующим образом:

TimeZone gmtZone = TimeZone.getTimeZone("GMT"); 
SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy"); 
format.setTimeZone(gmtZone); 

DateCell dateCell = .... 
String dateString = format.format(dateCell.getDate()); 
+0

это решаемой! Спасибо, Тим! – felipecao

Смежные вопросы