日期时间转换

时间:2011-02-16 22:22:59

标签: excel datetime date

我有40241作为日期值。这是哪种格式?

我认为这是在午夜过后的几秒钟。 但我需要一个公式,以便我可以手动完成并验证!!

由于

5 个答案:

答案 0 :(得分:3)

如果是Excel日期戳,那么它是自1899年12月31日以来的天数(1900年被视为闰年);将其定为2010年3月4日......除非Excel配置为使用Mac 1904日历,在这种情况下,它是自1904年1月1日以来的天数。

如何转换它取决于您首选的脚本语言;或者您是否可以简单地使用Excel本身,只需将该单元格的格式掩码设置为其中一种日期格式

答案 1 :(得分:2)

如果是“午夜过后”,你可以这样做:

  • 除以3600(一小时内的秒数);你得到了小时数;
  • 取该分裂的其余部分,并将其除以60;你得到分钟;
  • 余下的是秒。

示例:

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

所以现在是11:10:41。

顺便说一句,我想这是一个时间值;如果它是一个日期时间值,它可能会更大(如UNIX时间戳)或它将有一个小数部分(如,IIRC,OLE日期)。


事实证明这是一个Excel日期;那么,看看this KB article,这些都详细解释了;但如果您只想正确显示它,请转到单元格的属性( Ctrl + 1 )并将其数据类型设置为“Date”或“Date / Time” “(或者不管它是什么,我现在手边没有Excel)。

答案 2 :(得分:0)

Excel以有趣的方式存储日期。我也有这个问题,但我从来没有搬到Excel以外,所以我可以在Excel中使用格式化功能。

您可以在这里阅读更多内容:

答案 3 :(得分:0)

Excel将日期保存为自1900年1月1日以来的天数的整数

注意: excel中存在错误,因此您执行转换并减去一个转换。如果在时间之后看到小数。

如果要验证它,可以使用以下代码来转换它:

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;
}     

答案 4 :(得分:0)

我在没有时间(https://svn.apache.org/repos/asf/poi/trunk/src/java/org/apache/poi/ss/usermodel/DateUtil.java

的情况下为日期压缩了apache解决方案
  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();
  }

其他主题:Program in Java to convert a date to serial number as done in Excel