2014-10-05 3 views
0

내가 원했던 것은 (적어도 읽은 일부 기사에 따르면) 가능하지 않은 것처럼 보입니다. 하지만 그냥 다시 확인하십시오. 내 데이터베이스에서 DateTime을 읽습니다. 데이터베이스에서는 "01.01.2011"과 같이 작성되었지만 SQL로 읽은 후 string에 저장하면 "01.01.2011 00:00:00"이라고 표시됩니다. 그러면 나는 OK라고 생각했다. 나는 단지 string에서 시간을자를 것이다. 하지만 트릭이 있는데, 불가능한 것처럼 보입니다. string에서 "00:00:00"부분을 자르고 ("01.01.2011"이라고 말하면서) DateTime으로 변환해도 "00:00:00"이 계속 표시됩니다. 저는 C#을 처음 접했지만,이 부분은 Java에서 더 잘 해결되어서 날짜를 원하는 방식을 정의 할 수 있고 그렇게 표시됩니다 (원하지 않는 시간을 연결하지 않고도). 그래서 명확하게 말하면, 내가 원하는 것을 얻을 수 없다는 것 (또는 프리젠 테이션 레이어에서 올바른 포맷을 처리해야합니다) 또는 적절한 정보를 찾지 못했습니까?시간이없는 C#으로 문자열을 datetime으로 변환

감사

+0

당신이 달성하고자하는 것이 내게 불분명합니다. 당신이 실제로하려고하는 것을 우리에게 말할 수 있습니까? 교환은 당신의 질문에 간략한 설명과 함께 '내가 원하는 것'을 마지막으로합니다. –

답변

1

DateTime은 날짜와 시간 항상입니다. 원한다면 시간 부분을 무시할 수 있지만 여전히 남아 있습니다. 내부적으로 DateTime은 1/1/0001 이후 틱의 전체 수를 추적합니다. 밀리 세컨드 (millisecond)에 10,000 tick이있다. 따라서 DateTime ~ 이 아닐 경우에는 시간 구성 요소가 없습니다.

날짜 전용 데이터의 경우 일반적인 자정 시간은 자정 (00:00:00)으로 설정된 시간을 사용하는 것입니다. .Date 속성을 사용하여 DateTime에서이 중 하나를 가져올 수 있습니다.

일단 시간을 무시하면 항상 시간을 무시한다는 점에주의해야합니다. 그렇지 않으면 브라질과 같은 장소에서 일광 절약 시간 문제를 처리 할 때 문제가 발생할 수 있습니다. 시간은 11:59:59 PM에서 1:00:00 AM으로 전환됩니다. 데이터 처리 방법에 대해 신중하지 않으면 자정에 DateTime에 채워진 날짜 전용 데이터가 실제로 존재하지 않는 현지 시간으로 잘못 해석 될 수 있습니다.

.NET Framework에는 시간이없는 진정한 날짜의 기본 제공 유형이 없습니다. 그러나 Noda Time 라이브러리의 LocalDate 구조에서 찾을 수 있습니다. 날짜 기반 비즈니스 로직이 많은 경우이를 사용하는 것이 좋습니다.

+0

감사합니다. 그 사실은 내가 알아 낸 것이었지만 여기에서 확인하고 싶었습니다 (나는 그것을 믿을 수 없었기 때문에). 나는 Noda Time에 대해서도 읽었지만, 시도하기 전에 네이티브 C#으로는 실제로 불가능한지를 확인할 것입니다. 다시 한 번 감사드립니다 – user3466562

+0

NP. 또한 자바와 비교해 보았지만 비슷한 문제가 있습니다. 'java.util.Date'는 날짜 + 시간 타입이고'Calendar'도 마찬가지입니다. Joda-Time과 Java8 모두 Noda Time과 비슷한 'LocalDate'유형이 있습니다. –

0

myDatTime.ToString("MMM dd, yyyy"); 난 당신이 ..이 도움이 될 수 이해한다면 트릭을

+0

그래서 문자열에서 datetime으로 변환해야합니다 (SQL에서 문자열로 가져 오기 때문에), datetime에서 문자열로 (함수를 적용 할 때) 그리고 datetime으로 다시 변환해야합니다 (datetime으로 필요하기 때문에)? – user3466562

+0

@ user3466562 C#은 datetime 형식의 데이터 형식을 사용하여 직접 datetime 형식 변환을 지원합니다. 그래서 당신이 데이타베이스를 읽고 쓸 때, 당신은 단지 datatime 객체를 매개 변수로 전달할 수 있고 그것을 받아 들일 것입니다.시간이없는 날짜 만 표시하려면 to 문자열 메서드 – Steve

+0

도 보았습니다.하지만 문제는 datetime이 null 일 때입니다. 그래서 나는 그것을 문자열로 읽은 다음 그것을 처리 할 것이라고 생각했습니다. 그러나 이것은 엉덩이에 고통처럼 보인다. 이에 따르면 : http://social.msdn.microsoft.com/Forums/vstudio/en-US/4ff9b7c9-ef08-4fe3-a579-d8a0c7188796/remove-time-from-datetimeminvalue 시간을자를 수 없습니다. C#의 datetime. 그래서 나는 문자열 날짜가 비어 있는지 확인해야하고 날짜 시간으로 검색하지 않으면 – user3466562

0

할 것입니다. C#에서
: SQL 서버에서
if(!string.IsNullOrEmpty(yourDateTime)) { yourDateTime.ToString("dd/MM/yyyy"); }
: 닷넷에서

select convert(varchar, yourDateTime ,102) as [yourDateTime] 
관련 문제