XLSXReader reader = new XLSXReader(filename); ...
далее преобразую в список массива строк list далее прохожусь по строкам и считываю в одной ячейке дату. дата в самом эксель файле изначально записана в таком формате 17.02.2017 00:00:00 после считывания получаю строку с таким значением "42768" - т.е. java сама преобразовывает 17.02.2017 00:00:00 в это число.
я хочу создать метод который парсит значения из 42768 обратно в дату. мой вариант не работает.
private String getDate(String datestr) { //42768
SimpleDateFormat sdf = new SimpleDateFormat("DD.mm.yyyy HH:mm:ss");
try {
String s = sdf.format(sdf.parse(datestr));
return s;
} catch (Exception e) {
// Fail, пробуем распарсить как эксель-дату
try {
return sdf.format(DateUtil.getJavaDate(Double.parseDouble(datestr)));
} catch (Exception e1) {
return null;
}
}
}
очень надо. помогите пожалуйста. нужно чтобы из экселя эта дата или считывалась нормально без преобразования в число. либо подскажите метод как обратно это число в дату превратить.
Здравствуйте, согласен с zRrr, что лучше все-таки использовать уже разработанные для Вас утилиты. В данном конкретном случае Apache POI уже разработали целую линейку таких методов, например, DateUtil.html#getJavaDate(double).
Также следует понимать причину такого поведения. А причина заключается в том, что excel представляет дату как количество дней начиная с 1 января 1900.
Но все же если Вам все-таки необходимо написать свой собственный код, то я бы все равно посоветовал взять наработки. Ниже приведен код, который сделаем необходимое конвертирование.
import java.util.Calendar;
import java.util.GregorianCalendar;
public class ExcelDateToJava{
public static final int SECONDS_PER_MINUTE = 60;
public static final int MINUTES_PER_HOUR = 60;
public static final int HOURS_PER_DAY = 24;
public static final int SECONDS_PER_DAY = (HOURS_PER_DAY * MINUTES_PER_HOUR * SECONDS_PER_MINUTE);
public static final long DAY_MILLISECONDS = SECONDS_PER_DAY * 1000L;
public static void main(String[] args) {
int wholeDays = (int) Math.floor(42768);
int millisecondsInDay = (int) ((42768 - wholeDays) * DAY_MILLISECONDS + 0.5);
Calendar calendar = new GregorianCalendar();
setCalendar(calendar, wholeDays, millisecondsInDay);
System.out.print(calendar.getTime());
}
public static void setCalendar(Calendar calendar, int wholeDays, int millisecondsInDay) {
int startYear = 1900;
int dayAdjust = -1; // Excel thinks 2/29/1900 is a valid date, which it isn't
if (wholeDays < 61) {
// Date is prior to 3/1/1900, so adjust because Excel thinks 2/29/1900 exists
// If Excel date == 2/29/1900, will become 3/1/1900 in Java representation
dayAdjust = 0;
}
calendar.set(startYear, 0, wholeDays + dayAdjust, 0, 0, 0);
calendar.set(GregorianCalendar.MILLISECOND, millisecondsInDay);
}
}
Результат выполнения Thu Feb 02 00:00:00 MSK 2017
Надеюсь обе рекомендации помогут.
Есть данные Name, NewtworkStatusих несколько десятков от 50+ Я пытаюсь отобразить список через ListView и SimpleAdapter
Есть поле для вводе текста, допустим ищем пользователей по имени в БДЕсть метод (упрощенный), который выполняется при каждом наборе символа
Есть страница авторизации которую Spring Security должен отдать но что-то идет не так и я получаю 404Помогите пожалуйста разобраться в чем моя ошибка
Бьюсь и не могу справиться с простейшим, метод "printText" в классе Class, в сервлете requestsetAttribute на JSP, выводит ошибку 500, гляньте код, что не так? Tomcat8,...