2013-03-04 2 views
1

데이터베이스의 날짜/시간 데이터는 시간대가있는 Oracle 시간 스탬프 (02-FEB-2013 13:25:00 US/PACIFIC)로 저장됩니다. 데이터를 읽을 때이 시간과 사용자의 현재 현지 시간의 차이를 확인해야합니다. 위의 사용, 나는 사용자의 로컬 시간 오프셋을 얻을 수 있습니다 :사용자 로컬 시간 가져 오기

OracleTimeStampTZ dtzLastActivity = new OracleTimeStampTZ(dr["LAST_ACTIVITY_TZ"].ToString()); 
TimeSpan tsOffset = dtzLastActivity.GetTimeZoneOffset(); 

내가 어쩌면 오프셋만을 알고, TimeZoneInfo 중을 사용하여 로컬 시간을 취득 할 수있다, 그래서 나는 그 차이를 얻을 현지 시간에서 데이터베이스의 시간을 뺄 수 있습니다 ?

답변

1

US/Pacific은 Windows 시간대 ID가 아닌 IANA/Olson 시간대 식별자입니다. 그래서 TimeZoneInfo 클래스를 사용할 수 없습니다.

대신 NodaTime과 같은 TZDB 구현을 사용하십시오. 이러한 유형의 시간대를 완전히 인식하고 찾고있는 계산 유형을 수행 할 수 있습니다.

BTW - US/Pacific 실제로는 America/Los_Angeles의 별칭입니다. 이 시간대 목록은 here입니다.

죄송합니다

UPDATE, 난 당신이 OracleTimeStampTZ을 사용하고 있음을 간과. 이 appears은 이미 TZDB를 구현하기 때문에 직접 사용할 수 있어야합니다. 다음을 시도하십시오.

var span = DateTime.UtcNow - dtzLastActivity.ToUniversalTime().Value; 
+0

@Aristos @Aristos 내가 올바르게 필요한 것을 전달하지 않았다고 생각합니다. 나는 데이터베이스에있는 것과 사용자의 로컬 시간이 아니라 동일한 오프셋의 로컬 시간 사이의 시간 차이가 필요합니다. 따라서 열에 태평양 표준 시간대가 포함되어있는 경우 사용자가 데이터를 보는 위치가 불분명하므로 차이점을 표시하려면 태평양 시간대를 가져와야합니다. – NoBullMan

+0

감사합니다 매트, 그게 내가 필요한 것입니다. – NoBullMan