2009-12-29 134 views
2

我不能相信这个表面上明显的问题找到答案时失败了多长时间。我如何将日期时间转换为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中有一个。只需使用构造,以日期时间作为参数:

Date d = new Date(dt); 
+0

是的。好的工作,并且非常感谢。现在我知道更多! – thepaulpage 2009-12-29 16:50:47

11

没有“日期”类型等。这都是日期时间。只是当你打电话给.Date时,那天你会得到那个DateTime。

如果你在谈论VB.NET中的“Date”数据类型,那就是DateTime,不管你信不信。

+2

那么为什么我会得到我收到的错误? – thepaulpage 2009-12-29 16:32:13

+0

不知道,我只是在VB中试过它,它没有任何问题... – 2009-12-29 16:34:42

+0

我试过它在C#中没有System.Date类型... – 2009-12-29 16:39:18

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建模的一部分)有一个System.Date类型。 – 2009-12-29 16:36:44

+3

@Tommy:那是我的怀疑(见编辑:) - 这真是太可怕了。某些特定于SQL Server的应该不会对“System”名称空间起作用: – 2009-12-29 16:37:25

+0

@Tommy:不是这样的。 – 2009-12-29 16:44:39

1

尝试做以下

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

这将只返回日期作为字符串,所以我认为你可以使用它作为

Date dateNow = new Date(onlyDate); 
相关问题