2014-01-23 54 views
2

我試圖將其轉換爲字節數組,但最小字節數組爲5創建。 但我只有4個字節只爲這個日期時間作爲字節存儲在我的字節數組中。c#如何將日期時間轉換爲4字節的字節數組

碼是這樣的:

byte[] b = new byte[] {10,12,12,12}; 
DATETIME t=datetime.now(); 
array.copy(BitConverter.GetBytes(t.ticks),1,b,4); 

但GetBytes會(t.ticks)返回的8個字節數組。我不知何故希望它只能轉換爲4個字節。

+0

您是否需要存儲日期或整個日期+時間? –

+9

4個字節根本是不夠的。所以你需要犧牲範圍或準確性。 'DateTime'支持100ns步長從1年到9999年的日期。這需要8個字節。 – CodesInChaos

+1

...或增加存儲它的大小。 – DonBoitnott

回答

-1

嘗試使用此代碼:

byte[] b = new byte[] { 10, 12, 12, 12 }; 
DateTime t = DateTime.Now; 
Array.Copy(BitConverter.GetBytes(t.Ticks), 0, b, 0, 4); 
+0

dat只存儲從GetByte(t.ticks)收到的8字節的前4個字節...其他4個字節丟失。 – user3229083

2

您可以使用32位的unix時間。但要小心2038年的問題。您可以在下面找到樣品溶液。日期時間存儲在4個字節中。

 byte[] b = new byte[] { 10, 12, 12, 12 }; 
     DateTime now = DateTime.Now; 
     var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
     var csMinDate = DateTime.MinValue; 
     TimeSpan tsEpoch = now - epoch; 
     int passedSecods = (int)tsEpoch.TotalSeconds; 
     byte[] copyBytes = BitConverter.GetBytes(passedSecods); 
     Array.Copy(copyBytes, 0, b, 0, 4); 
     DateTime tCompare = epoch.AddSeconds(BitConverter.ToInt32(b, 0)); 
相關問題