2014-06-17 4 views
1

패킷 데이터를 만드는 C# 프로그램을 만들고 있습니다. 패킷의 데이터 중 하나는 4 바이트 크기의 날짜 및 시간입니다. 나는 이것을했다 :날짜 및 시간을 저장할 다른 데이터 유형

public byte[] convertDateTimetoHex4bytes(DateTime dt) 
    { 
     //Convert date time format 20091202041800 
     string str = dt.ToString("yyyyMMddhhmmss"); 
     //Convert to Int32 
     Int32 decValue = Convert.ToInt32(str); 
     //convert to bytes 
     byte[] bytes = BitConverter.GetBytes(decValue); 
     return bytes; 
    } 

그러나 32 비트가 너무 작기 때문에 (실행 중 오류) 8 바이트의 데이터를 사용해야한다. 4 바이트가있는 다른 작은 날짜 시간 형식이 있으면 누구든지 나를 도울 수 있습니까? 또는 다른 방법으로?

+0

왜 바이트 배열로 변환해야합니까? 그 결과로 무엇을 할 계획입니까? –

+1

따라야 할 정확한 형식이나 사양은 무엇입니까? 왜 당신은 DateTime을 그와 같은 문자열로 포맷하고 있습니까? – OSborn

+0

가능성이 복제 - http://stackoverflow.com/questions/249760/how-to-convert-unix-timestamp-to-datetime-and-vice-versa –

답변

1

숫자로 변환 할 때 주어진 문자열 값이 단순히 too big이며 Int32로 표시되기 때문에 오류는 논리적입니다. 추가 정보는 "밀어 넣을"수 없습니다.

20140616160000 -- requested number (i.e. DateTime for today) 
    2147483647 -- maximum Int32 value (2^31-1) 

[전통적] 32 비트 UNIX Timestamp 같이 작동 할 수 있지만, 오직 제 정밀도 2,038 ~ 1,970의 제한된 범위를 갖는다. 이 방법에 관심이 있으시면 How to convert a Unix timestamp to DateTime and vice versa?을 참조하십시오.

타임 스탬프는 다른 시간 구성 요소에서 사용되지 않은 숫자가 없으므로 숫자 범위가 작아집니다. 예 : 원래 형식에서 다음 형식의 유니온 숫자는 사용되지 않으므로 "낭비"됩니다.

yyyyMMddhhmm60-yyyyMMddhhmm99 -- these seconds will never be 
yyyyMMddhh60ss-yyyyMMddhh99ss -- these minutes will never be 
yyyyMMdd25hhss-yyyyMMdd99hhss -- these hours will never be 
           -- etc. 
+0

설명 및 링크 주셔서 대단히 감사합니다! – user3603503

관련 문제