오후에는 MVC 및 EXTJS의 날짜 형식을 변환하는 데 문제가 발생했습니다. .NET 서버 측에서 DateTime 객체를 직렬화 한 결과 '/DATE (1335258540000)/' 와 같은 문자열 형식입니다.
정수 1335258540000은 실제로 1970 년 1 월 1 일과이 Datetime 사이의 밀리 초 간격입니다. javaScript를 통해 평가 함수를 사용 하여이 날짜 문자열을 다음과 같이 시간대가있는 날짜 개체로 변환합니다.
var date = eval ( 'new' + eval ( '/date (1335258540000)/'). 소스)를 사용하여 JS 개체를 얻습니다.
경고 (날짜)를 통해 명확하게 확인하십시오.
Tue 4 월 24 일 17:09:00 UTC+0800 2012
위는 C# JSON의 날짜를 직렬화하여 자동으로 얻은 문자열입니다. 예를 들어 C#을 통해이 숫자를 얻기 위해 함수를 작성할 수도 있습니다.
public long millitimestamp (datetime thedate) {datetime d1 = new datetime (1970, 1, 1); dateTime d2 = thedate.touniversaltime (); timespan ts = new Timespan (d2.ticks -d1.ticks); 리턴 (긴) ts.totalmilliseconds; }위의 함수는 JSON 직렬화를 사용하여 얻은 문자열의 정수와 동일합니다.
그러나 클라이언트에서 서버쪽으로 돌아갈 때 날짜에 문제가 있습니다. JavaScript의 날짜 개체를 서버쪽으로 다시 전달하는 방법은 무엇입니까?
먼저 JavaScript 날짜의 gettime ()을 통해이 정수를 가져온 다음 서버에서 정수를 구문 분석하고 C# dateTime 객체로 '구성'하십시오. 아이디어는 아마도 이것과 같지만 반대 방향으로 돌아 왔을 때 약간의 문제가 발생했습니다.
public dateTime convertTime (long milliontime) {Long Timetricks = New DateTime (1970, 1, 1) .ticks + milliontime * 10000; 새로운 DateTime (Timetricks)을 반환합니다. }ConvertTime을 통해 얻은 결과는 8 시간 적은 것으로 나타 났으며, 이는 서버의 시간대 인 East 8th Zone 시간이 된 것으로 나타났습니다. 이는 8 시간의 나노초가 추가되어야한다는 것을 의미합니다. C#의 시간 스탬프 단위는 1 천만 분, 1 시간은 3600 초, 즉 8*3600*10000000000이기 때문입니다.
따라서 ConvertTime 기능이 수정되었으며 올바른 기능은 다음과 같습니다.
public dateTime convertTime (long milliontime) {Long Timetricks = new dateTime (1970, 1, 1) .ticks + million * 10000 + Timezone.currentTimezone.getUtCoffset (datetime.now) .hours * 3600 * (Long) 100000000; 새로운 DateTime (Timetricks)을 반환합니다. }JS 및 C#의 시간 및 날짜 형식 변환의 위의 간단한 예는 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.