문제

시간 측정값을 처리하고 저장하는 것이 가장 좋은 방법인지 결정하는 데 문제가 있습니다.

사용자가 hh:mm:ss 또는 mm:ss 형식으로 시간을 입력할 수 있는 텍스트 상자가 있는 앱이 있습니다.

그래서 저는 이 문자열을 구문 분석하고, 콜론으로 토큰화하고, 비즈니스 로직에 대한 TimeSpan을 생성(또는 TimeSpan.Parse()를 사용하고 mm:ss 케이스에 "00:"만 추가)할 계획이었습니다.좋아요?

그런데 이것을 데이터베이스에 어떻게 저장합니까?필드 유형은 무엇입니까?DateTime이 잘못된 것 같습니다.00:54:12 시간이 1901-01-01 00:54:12 로 저장되는 것을 원하지 않습니다. 조금 좋지 않은 것 같나요?

도움이 되었습니까?

해결책

TimeSpan에는 Int64가 있습니다. 진드기 대신 저장할 수 있는 속성과 건설자 Ticks 값을 사용합니다.

다른 팁

가장 간단한 것은 사용자 입력을 정수 초로 변환하는 것입니다.따라서 54:12 == 3252초이므로 3252를 데이터베이스나 다른 곳에 저장하십시오.그런 다음 사용자에게 표시해야 할 때 다시 변환할 수 있습니다.

하루 미만의 기간에는 다른 사람들이 말했듯이 초를 사용하십시오.

장기간의 경우 DB 엔진에 따라 다릅니다.SQL Server의 경우 2008 이전 버전에서는 날짜/시간을 원합니다.괜찮습니다. 기본 날짜인 1900년 1월 1일을 무시하면 됩니다.운이 좋게도 SQL Server 2008을 사용하고 있다면 별도의 날짜 및 시간 데이터 유형을 사용할 수 있습니다.실제 날짜/시간 유형을 사용하면 기간을 비교하기 위해 DateDiff 함수를 사용할 수 있다는 이점이 있습니다.

대부분의 데이터베이스에는 일종의 시간 간격 유형이 있습니다.대답은 당신이 말하는 데이터베이스에 따라 다릅니다.Oracle의 경우 일수(소수 일수 포함)를 나타내는 부동 소수점 NUMBER일 뿐입니다.이를 DATE 유형에 추가하거나 빼면 올바른 답을 얻을 수 있습니다.

정수 초(또는 적절한 경우 밀리초)로 표시됩니다.

시작 시간과 종료 시간을 모두 수집하고 있나요?그렇다면 DBMS가 지원하는 경우 "타임스탬프" 데이터 유형을 사용할 수 있습니다.그렇지 않은 경우 날짜/시간 유형과 같습니다.이제 날짜 부분이 저장되는 것을 원하지 않는다고 말했습니다. 그러나 기간이 자정에 걸쳐 있는 경우를 고려하십시오. 예를 들어 23:55:01에 시작하여 00:05:14에 끝납니다. 그 안에 날짜도 있어요.두 날짜-시간 값 사이의 경과 시간(초)을 반환하는 함수에는 표준 빌드가 있습니다.

초 또는 분 동안 정수를 사용하십시오.아마도 초가 더 좋을 것입니다.너무 정밀하게 무언가를 선택한다고 해서 결코 자책하지 않을 것입니다.또한 UI의 경우 사용자가 실제로 ":"를 올바르게 입력하는 것에 대해 걱정할 필요가 없는 여러 텍스트 입력을 사용하는 것이 좋습니다.0-59를 포함하는 분 및 초 값과 같은 다른 제약 조건을 추가하는 것도 훨씬 쉽습니다.

int 유형이 이를 수행해야 하며 이를 초 단위로 저장하고 앞뒤로 구문 분석해야 합니다.

http://msdn.microsoft.com/en-us/library/ms187745.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top