date时间转换

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

我想是在午夜过去了。 但我需要一个公式,以便我可以手动和validation!

谢谢

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

如何转换取决于你喜欢的脚本语言; 或者您是否可以简单地使用Excel本身,并将该单元格的格式掩码设置为其中一种date格式

如果是“午夜过去的秒钟”,你可以简单地做到这一点:

  • 除以3600(一小时内); 你得到的小时数;
  • 把剩下的那个部分除以60; 你得到的分钟;
  • 其余的是秒。

例:

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

所以现在是11:10:41

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


事实certificate,这是一个Exceldate; 那么,看看这个知识库文章 ,这一切都详细解释; 但如果你只是想正确显示它,继续单元格的属性( Ctrl + 1 ),并将其数据types设置为“date”或“date/时间”(或者不pipe它是什么,我没有Excel在此刻手)。

Excel以有趣的方式存储date。 我也曾经遇到过这样的问题,但是我从来没有搬过Excel,所以我只能在Excel中使用格式化函数。

你可以在这里阅读更多:

Excel自1900年1月1日起将date保存为一个整数

注意:在Excel中有一个错误,所以你做了转换,并减去一个。 如果在时间之后看到小数点

这是一些Java代码来转换它,如果你想validation它:

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

我没有时间压缩date的Apache解决scheme( 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编程,将date转换为序列号,如Excel中所示