2012-07-27 30 views
4

在SQL Server(T-SQL),你可以一個DateTime變量轉換爲AA十進制值是這樣的:.NET:日期時間轉換爲十進制

CONVERT(DECIMAL(20,10),@mytime) 
Sample Input: 2012-07-27 08:29:20.000 
Sample Output: 41115.3537037037 

是否有.NET轉換日期時間的任何等同方法(C#或VB)到相同類型的小數?

我期待在不同的日子比較時間。

計算

41115.3537037037 % 1 = .3537037037 

這讓我很容易地在不同的日期比較倍。

+1

不看太有用的 - 這是什麼意思41115.3537037037? – 2012-07-27 14:58:32

+0

由於@JonSkeet表示這是天數,小數部分是你一天中有多遠。通過取小數部分,您可以快速比較不同日期的時間。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-07-27 15:02:10

回答

6

看起來這是「1900年1月1日以來的天數」。在這種情況下,你會使用:

DateTime epoch = new DateTime(1900, 1, 1); 
TimeSpan difference = date - epoch; 
double days = difference.TotalDays; 
+0

試用Math.Floor(天)。 – 2012-07-27 15:03:01

+1

@SteenT:爲什麼?問題中的輸出顯示非整數值... – 2012-07-27 16:05:31

0

我知道你指定你要比較天的時間(得到小數部分),但因爲標題是如何日期時間轉換爲十進制,這裏是如何獲得整個數值在一個(整數和小數部分)。你可以做如下(VB.NET),這將是相當於到SQL Server:

Dim TimeZero As New DateTime(1900, 1, 1) 
Dim MyTime As DateTime = DateTime.Parse("2012-07-27 08:29:20.000") 
Dim DecResult As Decimal = DateDiff(DateInterval.Day, TimeZero, MyTime) + (MyTime.TimeOfDay.TotalSeconds/(24*3600)) 
相關問題