2012-02-02 166 views
3

我有一個字符串按以下方式看起來不錯:用毫秒將日期時間轉換爲double或int?

TimeString = "2011.01.02 22:06:52.091" 

現在我想將其轉換爲加倍,並將其保存爲雙號。我正在做c#,我怎麼能做到這一點?

真的無法在網上找到答案。

編輯:

的時間是一種金融貨幣報價時間戳:

時間買入賣出

2011.01.02 22:06:52.091 1.5000 1.5001

它是外匯報價時間的時間戳。我更喜歡這樣:xxxxxxxxxxxxxxxx.ooo,xxxxxxxxxxxxxxx是顯示「2011.01.02 22:06:52」我們有多少秒的int部分,而.ooo是「091」的毫秒,您怎麼看?

+2

什麼樣的價值做你希望得到的結果呢?蜱,毫秒數等?換一種方式,你打算如何使用結果? – 2012-02-02 02:37:15

+0

可能的重複[如何將日期時間值轉換爲雙?](http://stackoverflow.com/questions/1010697/how-can-i-convert-a-datetime-value-to-a-double) – adatapost 2012-02-02 02:41:16

+0

@ M.Babcock,實際上,這是外匯報價時間的時間戳。我更喜歡這樣:xxxxxxxxxxxxxxxx.ooo,xxxxxxxxxxxxxxx是顯示「2011.01.02 22:06:52」我們有多少秒的int部分,而.ooo是「091」的毫秒,你覺得如何? – 2012-02-02 02:41:42

回答

4
var span = DateTime.ParseExact(TimeString, 
          "yyyy.MM.dd HH:mm:ss.fff", 
          CultureInfo.InvariantCulture) - 
     new DateTime(2011, 01, 02, 22, 06, 52, 0); 
double d = span.TotalMilliseconds/1000.0; 

把它變成一個雙

+0

@ Keith.Nicholas,String未被識別爲有效的DateTime。這是通過運行您的代碼投訴。 – 2012-02-02 03:11:08

+0

對不起,應該是HH不是......,改了我的代碼,HH是24小時的時間。 – 2012-02-02 03:17:55

+0

居然把它改成了更好的東西:) – 2012-02-02 03:23:59

3

有一對夫婦的選擇,但它是不可能知道什麼是「最好的」,而無需知道使用場景。

如果可以將其存儲爲long(Int64),則可以使用DateTime.Ticks

另一種選擇是使用DateTime.ToOADate,它將DateTime轉換爲OLE自動化日期的雙精度型。

要轉回,您可以使用constructor that takes TicksDateTime.FromOADate

+0

@ Reed.Copsey,你可能會寫幾個代碼來進一步解釋嗎? – 2012-02-02 03:10:25

0

我相信這是你正在嘗試做的:

static void Main(string[] args) 
{ 
    String timeString = "2011.01.02 22:06:52.091"; 

    string format = "yyyy.MM.dd HH:mm:ss.fff"; 

    double date = DateTime.ParseExact(timeString, format, CultureInfo.InvariantCulture).ToOADate(); 

}