2012-04-08 129 views
1

我工作的一個嵌入式項目,需要一個DDMMYY日期和時間HHMMSSmmm轉換爲.NET風格100ns ticks since Jan 1, 0001.如何將日/月/年日期轉換爲自0001年1月1日以來.NET樣式100ns的勾號?

我已經分解到年,月,日,小時,第二,分鐘,毫秒值,像這樣:

//DDMMYY 
year = Date.Val % 100 + 2000;//Year 
month = (Date.Val/100) % 100;//JAN = 1, FEB = 2, etc 
day = (Date.Val/10000) % 100;//day of the month 
//HHMMSSmmm 
millisecond = (UTCTime.Val % 1000); 
second =  (UTCTime.Val/1000) % 100; 
minute =  (UTCTime.Val/100000) % 100; 
hour =   (UTCTime.Val/10000000) % 100; 

我現在需要的是把這些價值觀和做嵌入式C相當於此問題的方法:

DateTime date = new DateTime(2012, 4, 7, 7, 5, 23, 205); 
long ticks1 = date.Ticks; 

編輯
我正在使用PIC32單片機。

+0

有稱爲['SystemTimeToFileTime'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms724948(V A Win32函數= VS。 85).aspx)它會爲你做這件事(除了添加一個常量)。你有這些嗎? – 2012-04-08 00:16:10

+0

我正在PIC32MX上工作,所以沒有。我應該添加該信息。 – CodeFusionMobile 2012-04-08 01:17:34

回答

2

我認爲你可以用標準C使用mktime來做到這一點。首先,把你的價值觀爲struct tm

struct tm { 
    int tm_sec;   /* seconds */ 
    int tm_min;   /* minutes */ 
    int tm_hour;  /* hours */ 
    int tm_mday;  /* day of the month */ 
    int tm_mon;   /* month */ 
    int tm_year;  /* year */ 
    int tm_wday;  /* day of the week */ 
    int tm_yday;  /* day in the year */ 
    int tm_isdst;  /* daylight saving time */ 
}; 

可以忽略wday和yday,但應該isdst設置爲-1(詳細內容請閱讀手冊頁)。然後,打電話給mktime(),它會給你1970年以來的秒數。然後,使用任何必要的方法,例如一個簡單的一次性C#程序,計算出Microsoft時代與Unix時代之間的秒數。這是一個不可改變的值,您應該將其硬編碼到您的C程序中。將其添加到mktime的結果中,乘以將秒轉換爲滴答,並添加毫秒部分。

+1

'mktime'有問題,因爲它在當地時間運行,而不是通用時間。 – 2012-04-08 00:23:11

+0

我正在研究PIC,是否會注意到差異?明天將測試這個檢查,但我猜測它沒有辦法知道它是在什麼時區。 – CodeFusionMobile 2012-04-08 04:11:30

3

正確的時代開始,使用POSIX指定的公式,然後將其調整爲正確曆元和「.NET時期」之間的秒數,並在100-ns-tick上添加零件。

tm_sec + tm_min*60 + tm_hour*3600 + tm_yday*86400 + 
    (tm_year-70)*31536000 + ((tm_year-69)/4)*86400 - 
    ((tm_year-1)/100)*86400 + ((tm_year+299)/400)*86400 

來源:http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_15

+0

我沒有今年的一天,我有一天的一天。使這個解決方案有點不方便,但仍然有效。 – CodeFusionMobile 2012-04-08 02:50:35

+0

是不是將每月的日曆轉換爲典型的入門編程練習?還是在九十年代流行呢? :-) – 2012-04-08 03:49:19

相關問題