2013-07-12 106 views
1

我有双格式数字作为字符串上传的文件,其中每个人都等于具体时间如下:(实际上,我必须将左侧转换到右侧)字符串数字日期和时间格式

40981.0500559 = 13.03.2012 01:12:04.000 

40981.0500676 = 13.03.2012 01:12:05.000 

40981.0500792 = 13.03.2012 01:12:06.000 

40981.0500910 = 13.03.2012 01:12:07.000 

40981.0501025 = 13.03.2012 01:12:08.000 

我尝试使用excel,并找出前五位数字显示日期和从1900年的计数,这意味着00000,并且每天都会变成+1。其余7位数字。它显示的时间是从00:00:00到00000000之间的时间,并且每个0.0000116在时间的秒数上增加,直到达到0.9999999再次等于00:00:00。但我真的很困惑java的转换出路。我试过这个:

//Time[j] = 40981.0500559 as string format** 

double T = Double.parseDouble(Time[j])*100000000- 2766489481590L; 
DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss.FFF"); 
System.out.println(formatter.format(T)); 

但是当我改变输入值的时候会得到错误的日期。例如40993.2891410应该变成25/03/2012 06:56:21.782,但我知道上述命令没有针对所有号码进行校准。

+0

这是Java的吗?请标记为这样。 – imulsion

+0

[OLEDate java实现]的可能的重复(http://stackoverflow.com/questions/2599102/oledate-java-implementation) –

+1

你有一个“OLE自动化日期”,又名“OLEDate”或“OADate”。您可以在[此MSDN文章](http://msdn.microsoft.com/en-us/library/system.datetime.tooadate.aspx)的“备注”一节中阅读它们。请参阅[此问题](http://stackoverflow.com/q/2599102/634824)或[此问题](http://stackoverflow.com/q/9733254/634824)在Java中使用它们。 –

回答

0

试试这个

long T = (long)(Double.parseDouble("40981.0500559")*100000000- 2766489481590L);   
Date date=new Date(T);                  
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss.F");     
System.out.println(formatter.format(date));            
+0

仍然存在一些问题,我会查找它们 –

+0

为什么使用'FFF'的格式字符串? 'F'被记录为“本月的星期几”...... –

+0

嗨例如“40981.0500559”它应该是13.03.12 01:12:04.830但是我和你的格式日期是正确的bu时间成为08 :42:04.002我尝试了另一个输入数据,并且持续时间很长,甚至日期会变成错误的。我认为减去那个将它带入java标准毫秒时间的数字会导致错误地找到正确的日期和时间。 – Morteza