2016-04-28 442 views
2

我有一個DataGrid,其中包含幾個小時的值,我想知道:如何將DateTime中的「time」轉換爲int?

如何從我的DataGrid獲取ONLY的時間並將其轉換爲int(或double)變量。

我的目標是與我的DataGrid時間值的一些操作,喜歡的數字加進去

例: 使用我的「dataGridView1.Rows [1] .Cells [2] .Value.ToString( );」它會顯示一個DateTime值(它在我的DataGrid中),使用這個值,我想過濾掉它的時間並將其轉換爲int我想要捕獲時間的代碼部分:

txtAtiv.Text = dataGridView1.Rows[0].Cells[1].Value.ToString(); 
string value = dataGridView1.Rows[0].Cells[2].Value.ToString(); 
lblLeft.Text = value.Split(' ')[1]; 

我想獲得「值」(這是從DataGrid的DateTime值)並將其轉換爲一個int。

注: - 在我的數據網格爲我的日期它不相關的,我只需要挑時間(是的,我知道,我不能「分裂」的日期時間分別做他們)

+2

您如何期待時間可以轉換爲int?例如。 4:27 PM將如何表示爲int? –

+0

它是一個「字符串」還是「DateTime」?如果'DateTime'可以使用'DateTime。TimeOfDay'來獲得TimeSpan的時間,並且你可以在幾秒鐘,幾分鐘或幾小時內得到時間。否則,如果它是一個字符串,我會首先解析爲'DateTime'。 – juharr

+0

那麼,這是我的懷疑。我想知道是否有辦法做到這一點,如將時間轉換爲序列號 – MattDAVM

回答

1

第一步是字符串轉換爲DateTime。使用DateTime.TryParse(字符串值,出DateTime dt)。然後,如Mathew Watson正確地建議的那樣,使用dt.TimeOfDay.TotalMilliseconds獲取轉換爲毫秒的變量dt的值。如果TotalSeconds或TotalMinutes符合您的要求,也可以將其跨度轉換。 儘量避免在檢查單元格值是否爲空之前直接調用ToString()方法。如果我想避免檢查,我會讓編譯器通過使用類似下面的代碼:Rows [3] .Cells [2] .Value +「」來代替Value.ToString()。

+1

是dt將是可變的。 –

+0

在這裏一開始它顯示的錯誤在 「DateTime.TryParse(字符串值,出DateTime dt)」 錯誤: 'System.DateTime'是'類型',但像'變量'使用 – MattDAVM

+0

我'd將dt指定爲哪種類型的變量? – MattDAVM

4

如果你願意限於毫秒分辨率,那麼這很容易。

給定一個日期,你想從一個int得到部分時間/時間,你可以得到的毫秒數從午夜開始,像這樣:

DateTime dateTime = DateTime.Now; 
int timeMsSinceMidnight = (int)dateTime.TimeOfDay.TotalMilliseconds; 

如果要重建原來的日期從這個時候,就需要以毫秒爲單位的原始日期和時間從午夜開始:

DateTime date = dateTime.Date; // Midnight. 
DateTime restoredTime = date.AddMilliseconds(timeMsSinceMidnight); 

測試程序:

DateTime dateTime = DateTime.Now; 

Console.WriteLine("Original date/time: " + dateTime); 

int timeMsSinceMidnight = (int)dateTime.TimeOfDay.TotalMilliseconds; 

DateTime date = dateTime.Date; // Midnight. 
DateTime restoredTime = date.AddMilliseconds(timeMsSinceMidnight); 

Console.WriteLine("Restored date/time: " + restoredTime); 

time.TimeOfDay返回的值爲TimeSpan類型,便於存儲時間值。

如果你想將你的「毫秒,因爲午夜」回一個TimeSpan,你只是這樣做:

var timeSpan = TimeSpan.FromMilliseconds(timeMsSinceMidnight); 
+0

我現在將測試並在此處顯示結果 – MattDAVM

1

混合馬修和穆克什Adhvaryu的答案,我進入這一個,它完全符合我的需要,謝謝你們的支持!

txtAtiv.Text = dataGridView1.Rows[0].Cells[1].Value + ""; 

     string value = dataGridView1.Rows[0].Cells[2].Value + ""; 
     lblLeft.Text = value.Split(' ')[1]; 
     textStatus.Text = ""; 



     DateTime timeConvert; 
     DateTime.TryParse(value, out timeConvert); 

     double time; 
     time = timeConvert.TimeOfDay.TotalMilliseconds; 


     var timeSpan = TimeSpan.FromMilliseconds(time); 


     lblSoma.Text = timeSpan.ToString();