제 상황은 2005 년을 지원하는 SQL Server 데이터베이스에 데이터를 저장한다는 것입니다. DateTime 값이 저장되면 클라이언트의 로컬 시간입니다. 다른 클라이언트가있을 수있는 시간대에 관계없이 다른 클라이언트에서 날짜를 다시 가져올 수 있어야합니다.표준 시간대 문제를 무시하고 SQL Server에서 DateTime 데이터를 가져 오는 방법은 무엇입니까?
예를 들어 New York의 사용자가 DateTime 값을 " 2012-12-20 00:00 ", 캘리포니아의 사용자가 동일한 DateTime 값을 보길 원합니다. 이 DateTime 값은 시간대의 차이를 고려해서는 안되지만 그게 내가보고있는 것입니다. 현재 SQL Server는 해당 DateTime을 캘리포니아 사용자에게 "2012-12-19 21:00"으로 제공합니다. EST에서 PST 로의 변경으로 인해 -3 시간 롤백으로 인해 전날의 상황을 알 수 있습니다 (이 대화의 목적 상 DST 문제는 잊어 버립니다).
데이터를 역방향으로 가져오고 표준 시간대로 변환하지 않은 것이 내가 달성해야하는 것입니다. 그렇다면 어떤 조언을 제공 할 수 있습니까?
일부 코드는 고려해야 할 다음
테이블입니다 : 우리는 작업을 수행하여 SQL 클래스가
CREATE TABLE [dbo].[tblMeterReadings](
[fldMeterReadingsID] [int] IDENTITY(1,1) NOT NULL,
[fldMeterID] [int] NOT NULL,
[fldUser] [varchar](50) NULL,
[fldBy] [varchar](50) NULL,
[fldDateOfReading] [datetime] NULL,
[fldReading] [float] NULL,
[fldIsArchived] [bit] NULL DEFAULT ((0)),
, 다음과 같은 예에서 "SQL은"그의 목적은 수업. 이 호출은 @의 DATA0는 DateTime 개체는 SQL 날짜 시간 필드에 저장하는 매개 변수가있는 쿼리를 사용한다 :
sql.Execute(@"INSERT INTO tblMeterReadings (fldMeterID, fldDateOfReading) VALUES (" + MeterID + ", @data0)", Date);
궁극적으로,이,하는 SqlCommand를 설정 매개 변수를 할당을하고, command.ExecuteNonQuery() 호출을 발사 .
DataTable myTable = sql.readDataTable(@"SELECT fldMeterID, fldDateOfReading FROM tblMeterReadings");
그래서 내가 볼 것은 데이터베이스 자체에 날짜 "라는 것이다 : 이제
는 날짜를 검색하려면, 단순히 (우리는 SQL 클래스 헬퍼를 사용하여 다시) DataTable을로 선택 2012-12-20 00:00 "으로 예상했지만 디버그에서 MyTable 내용을 검사하면 해당 테이블의 날짜가"2012-12-19 21:00 "임을 알 수 있습니다.데이터베이스가 EST 상태의 시스템에서 실행되는 SQL Server에서 작성되었습니다. 그러나 내 컴퓨터는 PST로 설정됩니다. 따라서 SELECT에서 나에게 DateTime 값이 전달되는 방식의 차이.
무엇이 누락 되었습니까?
관련 항목 : http://stackoverflow.com/q/2532729/1583 – Oded
어떻게 날짜를 데이터베이스에 쓰고 있습니까? 문제는 데이터베이스에 저장하기 전에 datetime에서 표준 시간대 정보를 간단히 제거하여 해결해야합니다. –
@DanielHilgarth - 그리고 그걸로 UTC로 저장한다면, 나는 동의 할 것입니다. 그러나 이미 많은 데이터가 있습니다. 그리고 엄청난 전환이 일어날 때까지 나는 그것을 가지고있는 것처럼 그것을 마사지하려고 노력하고 있습니다. – DonBoitnott