2014-10-05 23 views
0

Кажется, что это невозможно, что я хочу (по крайней мере, согласно некоторым статьям, которые я прочитал). Но просто дважды проверьте это. Я читаю DateTime из моей базы данных. В базе данных написано «01.01.2011», но когда я прочитал его с помощью SQL и сохранил его в string, он говорит «01.01.2011 00:00:00». Тогда я подумал, что я просто сокращу время с string. Но есть трюк, похоже, что это невозможно. Даже когда я отрезал часть «00:00:00» от string (и он просто говорит «01.01.2011») и скрывает ее до DateTime, «00:00:00» все еще отображается. Я новичок в C#, но кажется, что эта часть намного лучше решается на Java, где вы можете определить, как вы хотите свою дату, и она отображается так (без времени выполнения, когда вы этого не хотите). Так просто, чтобы было ясно, действительно ли невозможно достичь того, что я хочу (и мне нужно позаботиться о правильном формате в моем слое презентации), или я просто не нашел нужную информацию?C# конвертировать строку в datetime без времени

Благодаря

+0

Непонятно, чего вы пытаетесь достичь. Не могли бы вы рассказать нам, что вы на самом деле пытаетесь сделать? Поделитесь последним «что я хочу» в вашем вопросе с кратким описанием. –

ответ

1

DateTime в .NET является всегда дата и время. Вы можете игнорировать часть времени, если хотите, но она все еще там. Внутри, DateTime отслеживает все количество тиков с 01.01.00. (В миллисекундах 10 000 тиков). Поэтому невозможно, чтобы DateTime до не имел компонент времени.

Для данных только для даты общим соглашением является использование даты со временем, установленным в полночь (00:00:00). Вы можете получить один из них от любого DateTime, используя его .Date.

Вам нужно быть осторожным, чтобы после того, как вы проигнорировали время, что вы всегда игнорировать время. В противном случае вы можете столкнуться с проблемами при решении вопросов летнего времени в таких местах, как Бразилия, где время переходит с 11:59:59 до 1:00:00. Если вы не будете осторожны с тем, как обрабатываете свои данные, данные, датированные только в DateTime в полночь, могут быть неправильно истолкованы как местное время, которое на самом деле не существует.

Нет встроенного типа для истинной даты без времени в .NET Framework. Тем не менее, вы можете найти его в структуре LocalDate библиотеки Noda Time. Вы можете подумать об использовании этого, если у вас много бизнес-логики, основанной на дате.

+0

спасибо, что было точно, что я тоже обнаружил, но хотел проверить ее здесь (так как я не мог этого поверить). Я также читал о Noda Time, но я подумал, прежде чем попробовать, что я проверю, действительно ли это невозможно с помощью родного C#. еще раз спасибо – user3466562

+0

NP. Кроме того, вы сравнивали с Java, но есть похожие проблемы. 'java.util.Date' - это тип даты + времени, а также' Календарь'. И Joda-Time, и Java8 имеют тип «LocalDate», похожий на Noda Time. –

0

myDatTime.ToString("MMM dd, yyyy"); будет делать трюк

+0

, поэтому мне нужно преобразовать его из строки в datetime (потому что из sql я получаю его как строку), а затем от datetime до строки (при применении вашей функции), а затем снова к datetime (потому что мне это нужно как datetime)? – user3466562

+0

@ user3466562 C# поддерживает листинг типа datetime непосредственно с типом datetime базы данных. Поэтому, когда вы читаете/записываете в базу данных, вы можете просто передать объект datatime в качестве параметра, и он будет принимать его.Если вы хотите отображать только дату без времени, тогда выполните метод string – Steve

+0

. Я тоже это увидел, но проблема в том, что время datetime равно null. Поэтому я думал, что прочитаю его как строку, а затем обработаю. Но это похоже на боль в заднице. В соответствии с этим: http://social.msdn.microsoft.com/Forums/vstudio/en-US/4ff9b7c9-ef08-4fe3-a579-d8a0c7188796/remove-time-from-datetimeminvalue невозможно усечь время от datetime в C#. Поэтому я думаю, что мне нужно будет проверить, является ли строковая дата пустым, и если ее не вернуть в качестве datetime – user3466562

0

Если я понимаю, что вы .. это может помочь.
в C#:
if(!string.IsNullOrEmpty(yourDateTime)) { yourDateTime.ToString("dd/MM/yyyy"); }
в SQL-сервере:

select convert(varchar, yourDateTime ,102) as [yourDateTime] 
Смежные вопросы