2014-03-03 3 views
0

데이터베이스에 datetime 값을 저장하는 안드로이드 클라이언트 서버 응용 프로그램을 만들었습니다. 서버는 mssql 서버입니다. 서버 측 프로그래밍은 C#으로 수행됩니다. 현재 시간은 datetime2 값으로 데이터베이스에 저장됩니다. 서버 시간대는 미국 산 표준 시간입니다. 그리니치 표준시로부터의 오프셋은 -07 시간입니다. 서버 시간은 GMT-7.00입니다. 현재 현지 시간은 GMT + 05.30입니다. 나는 GMT + 05.30 시간대에서 일할이 안드로이드 애플 리케이션을 개발했다. 그래서 서버 시간을 GMT-07.00에서 GMT + 05.30으로 변환하는 방법을 알아야합니다.android 응용 프로그램에서 서버와 클라이언트의 시간대 차이

다음 코드를 사용하여 서버 시간과 GMT를 설정했습니다.

TimeZone zone = TimeZone.CurrentTimeZone; 
DateTime server=DateTime.Now; 
DateTime universal=zone.ToUniversalTime(DateTime.Now); //GMT TIME 
//I have found that My server offset from GMT is -07.00 using the below code 
TimeSpan offset = zone.GetUtcOffset(DateTime.Now); 

내 서버 데이터베이스에 다음 값을 입력하면이 형식으로 테이블에 입력됩니다.

Here my local time is: 2014-02-03 20:25:08.0000000 

my server time at that moment is: 2014-03-03 07:55:28.0000000 

the utc time at that moment is: 2014-03-03 14:55:28.0000000 

따라서 내 서버 시간과 현지 시간에서 약 12 ​​시간 30 분 차이가 있습니다. 어떤 이유로 든이 위치에있는 서버가 다운되면 다른 시간대와 다른 오프셋을 가진 다른 위치에서 서버가 실행됩니다. 따라서 서버 시간과 현지 시간의 차이가 가끔 변경됩니다. 내 값이 언젠가 잘못되고 있기 때문에 내 응용 프로그램에 문제가 발생합니다. 내 서버의 시간을 계산하고 계산하여 로컬 시간과 동일하게 만들 때 오프셋을 찾는 방법이 있습니까?

+1

을 사용하여 비교할 수 있습니다. 1. 'TimeZone'을 절대 사용하지 마십시오. 대신,'TimeZoneInfo'를 대신 사용하십시오. 2. [웹 응용 프로그램에서'DateTime.Now'를 사용하지 마십시오.] (http://codeofmatt.com/2013/04/25/the-case-against-datetime-now/). 3. UTC 시간이 필요하면'DateTime.UtcNow' 만 사용하면됩니다. 4. 여기서 클라이언트 측 코드와 상호 작용하는 코드는 어디에도 보이지 않지만 클라이언트 표준 시간대를 마 법적으로 조정하고 싶습니까? 5. 실제로 * 여기 묻고있는 게 뭐니? 그것은 당신이 그것을 쓴 방식을 혼란스럽게합니다. –

답변

1

SQL 2008 이후 버전을 사용하는 경우 데이터를 DateTimeOffset으로 저장하십시오.

이렇게하면 다른 시간대에 비해 훨씬 쉽게 작업을 수행 할 수 있습니다. 그런 다음 ToLocalTime

관련 문제