1

私は組み込みプロジェクトに取り組んでおり、0001 年 1 月 1 日から DDMMYY 日付と HHMMSSmmm 時刻を .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マイクロコントローラに取り組んでいます。

4

2 に答える 2

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

于 2012-04-08T00:22:43.023 に答える
2

mktimeを使用して、標準の C だけで実行できると思います。まず、値をに入れます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 に設定する必要があります (詳細については、man ページを参照してください)。次に、1970 年からの秒数を取得する を呼び出しmktime()ます。次に、簡単な 1 回限りの C# プログラムなど、必要な手段を使用して、Microsoft エポックと Unix エポックの間の秒数を計算します。これは、C プログラムにハードコードする必要がある不変の値です。それを mktime の結果に追加し、乗算して秒をティックに変換し、ミリ秒の部分を追加します。

于 2012-04-08T00:17:24.853 に答える