преобразование даты и времени - PullRequest
1 голос
/ 17 февраля 2011

У меня 40241 в качестве значения даты. В каком это формате?

Я думаю, что это в секундах за полночь. Но мне нужна формула, чтобы я мог работать вручную и проверять !!

Спасибо

Ответы [ 5 ]

3 голосов
/ 17 февраля 2011

Если это метка даты в Excel, то это число дней с 31 декабря 1899 года (1900 год считается високосным);это означает, что 4 марта 2010 года ... если Excel не был настроен на использование календаря Mac 1904, в этом случае это число дней с 1 января 1904 года.

Как преобразовать его, зависит от вашего предпочтительного языка сценариев;или вы можете просто использовать Excel и просто установить маску формата для этой ячейки на один из форматов даты

2 голосов
/ 17 февраля 2011

Если это «секунды после полуночи», вы можете просто сделать это:

  • разделить на 3600 (секунд в часе);вы получаете количество часов;
  • берете остаток от этого деления и делите его на 60;вы получаете минуты;
  • остаток - секунды.

Пример:

40241/3600=11 (641)
641/60=10 (41)

Так что это 11: 10: 41.

Кстати, я полагаю, что это время значение;если бы это было значение datetime, оно, вероятно, было бы намного больше (например, метки времени UNIX) или содержало бы десятичную часть (например, даты IIRC, OLE).

Оказывается, это дата в Excel;затем взгляните на эту статью базы знаний , все подробно объяснено;но если вы просто хотите отобразить его правильно, перейдите к свойствам ячейки ( Ctrl + 1 ) и установите для ее типа данных значение «Дата» или «Дата / Время» (или что бы то ни было, у меня нет Excel под рукой).

0 голосов
/ 03 октября 2014

Я сжал решение Apache для даты без времени (https://svn.apache.org/repos/asf/poi/trunk/src/java/org/apache/poi/ss/usermodel/DateUtil.java)

  public static Date parseExcelDate(double date) {
        int wholeDays = (int) Math.floor(date);
        Calendar calendar = new GregorianCalendar();
        int startYear = 1900;
        int dayAdjust = wholeDays < 61 ? 0 : -1;
        calendar.set(startYear, 0, wholeDays + dayAdjust, 0, 0, 0);
        return calendar.getTime();
  }

Другой поток: Программа на Java для преобразования даты в серийный номер, как в Excel

0 голосов
/ 29 октября 2012

Excel сохраняет дату в виде целого числа для количества дней с 1 января 1900 года

Примечание: есть ошибка в Excel, поэтому вы делаете конвертацию и вычитаете ее. Если после этого времени вы видите десятичную дробь.

Вот код Java для его преобразования, если вы хотите это проверить:

public static Date ExcelDateParse(int ExcelDate){
    Date result = null;
    try{
        GregorianCalendar gc = new GregorianCalendar(1900, Calendar.JANUARY, 1);
        gc.add(Calendar.DATE, ExcelDate - 1);
        result = gc.getTime();
    } catch(RuntimeException e1) {}
    return result;
}     
0 голосов
/ 17 февраля 2011

Excel хранит даты интересным способом. Я тоже столкнулся с этим, но мне никогда не приходилось выходить за пределы Excel, поэтому я мог просто использовать функцию форматирования в Excel.

Вы можете прочитать больше здесь:

...