2009-12-29 4 views
2

Не могу поверить, как долго мне пришлось свалиться на поиск ответа на этот, казалось бы, очевидный вопрос.Как преобразовать DateTime в Date в C#

Date SomeRandomMadeUpDate = DateTime.Now.AddMonths(randomMonths).Date; 

Cannot implicitly convert type 'System.DateTime' to 'System.Date' I can even call:

Date.Now 

но называть .AddDays на это возвращает DateTime.

Опять же, вопрос: Как превратить C# DateTime в C# Date

ответ

3

мне пришлось искать его, потому что я Жду» t знал, что в .NET 4.0 есть тип Date, но, по-видимому, он есть в System.Dataflow.dll. Просто используйте конструктор, с DateTime в качестве аргумента:

Date d = new Date(dt); 
+0

Да. Хорошая работа, и большое спасибо. Теперь я знаю больше! – thepaulpage

11

Там нет типа «Дата» как таковой. Это все DateTimes. Просто, когда вы вызываете .Date, вы получаете этот DateTime с полуночи в этот день.

Если вы говорите о типе данных «Дата» в VB.NET, это то же самое, что и DateTime, верьте или нет.

+2

Тогда почему я получаю ошибку, которую я получаю? – thepaulpage

+0

Не знаю, я просто попробовал его в VB, и он работает без проблем ... –

+0

Я попробовал его на C# и не существует типа System.Date ... –

10

У .NET нет типа, представляющего только дату - это проблемы, подобные этому, что заставило меня начать Noda Time (который еще не готов к производству).

DateTime.Date возвращает еще DateTime с той же датой, что и в оригинале, но в полночь. Это в основном ближе есть к Date типа в .NET :(Учтите, что если вы хотите сегодняшней даты, то DateTime.Today является более простым способом вызова DateTime.Now.Date.

Я понятия не имею, почему компилятор дает ошибку сообщение, что позволяет предположить, что являетсяSystem.Date типа - это не на моей машине:

using System; 

class Test 
{ 
    static void Main() 
    { 
     Date today = DateTime.Now.Date; 
    } 
} 

дает эту ошибку:

Test.cs(7,9): error CS0246: The type or namespace name 'Date' could not be found (are you missing a using directive or an assembly reference?)

Можете ли вы дать аналогичную короткую, но полную программу, которая показывает сообщение об ошибке, которое вы получаете? Есть ли у вас какая-то другая библиотека, на которую ссылаются ? есть тип System.Date? (Как говорит Томми Carlier, возможно System.Dataflow?)

+1

System.Dataflow.dll (часть SQL Server Modeling) имеет тип System.Date. –

+3

@Tommy: Это было мое подозрение (см. Edit :) - это откровенно ужасно. Что-то, что специфично для SQL Server, не должно вносить вклад в пространство имен 'System' :( –

+0

@Tommy: сказать, что это не так. –

1

Попробуйте сделать следующее

string onlyDate = DateTime.Now.ToString("dd/MM/yyyy"); 

это вернет только дату в виде строки, так что я думаю, что вы можете использовать его как

Date dateNow = new Date(onlyDate); 
Смежные вопросы