2011-02-16 156 views
1

我有40241作为一个日期值。这是哪种格式?日期时间转换

我认为这是在过去的午夜秒。 但我需要一个公式,这样我可以手动制定和验证!

感谢

+0

为什么你知道这是约会? _date_在一天之内不是几秒钟,它具有更广泛的意义。 – 2011-02-16 22:25:43

+0

我已经在dat列中给出了输入。认为它是理所当然的。 – abbas 2011-02-16 22:26:59

+0

请提供更多信息。什么语言,你从哪里获得这个价值? – 2011-02-16 22:27:23

回答

2

如果是 “秒午夜”,你可以简单地这样做:

  • 除以3600(秒在一个小时内);你得到的小时数;
  • 采取该除法的余数,并除以60它;你得到分钟;
  • 其余是秒。

实施例:

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

因此,它是11时10分41秒。

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


事实证明,这是一个Excel日期;然后,看看this KB article,这一切都详细解释;但如果你只是想正确显示它,继续单元格的属性(Ctrl + )并将其数据类型设置为“日期”或“日期/时间”(或不管它是什么,目前手头有Excel)。

3

如果它是一个Excel邮戳,那么它是天的自1899年12月31日(以处理数量与1900闰年);它把它作为2010年3月4日...除非Excel被配置为使用Mac 1904日历,在这种情况下它是自1904年1月1日以来的天数。

如何转换它取决于您首选的脚本语言;或者是否可以简单地使用Excel本身,而只是设定该小区的格式掩码的日期格式之一

0

Excel保存日期为自1月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

我凝结的日期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(); 
    } 

其他线程:Program in Java to convert a date to serial number as done in Excel