我遇到的情况是,我只需从Date
获取DateTime
。
我有DateTime? StartDate
属性(Nullable
)用于保存日期值
我在下面试过,
var d = Convert.ToDateTime(StartDate).Date;
但它回归我,例如。 6/22/2006 12:00:00AM
执行var d = Convert.ToDateTime(StartDate).Date.ToString("d");
我可以将{d} 6/22/2006
...但我不想将DateTime?
转换为String
是他们在不使用Date
的情况下只获得ToString("d")
的任何方法吗?
答案 0 :(得分:10)
使用日期属性获取DateTime实例的Date组件:
var dateAndTime = DateTime.Now;
var date = dateAndTime.Date;
使用此方法,Date属性将在午夜返回日期。因此,在这种情况下,时间部分将是00:00:00。
有几种方法可以获得只是日期部分,但它的返回类型将是一个字符串:
1。)var date=DateTime.Now.ToString("dd/MM/yyyy"); //Can also use .ToString("dd-MM-yyyy");
2。)var dateOnlyString = dateTimeNow.ToShortDateString(); //Return 00/00/0000
参考:here.
答案 1 :(得分:7)
试试这个:
string x = DateTime.Now.ToShortDateString()
。
这将获得给字符串x的日期dd / mm / yy。
答案 2 :(得分:1)
我认为你的问题有点......没什么。
你要求一个没有时间的日期,但得到DateTime
,两者都有。在大多数情况下,我真的不认为这应该是一个问题:
如果您创建一个具有特定日期的DateTime
,并将其与另一个日期进行比较,并且这两个日期都设置为午夜,那么您的比较将是有效且正确的。例如:
var yesterday = new DateTime(2014, 3, 10);
var today = new DateTime(2014, 3, 11);
var tomorrow = new DateTime(2014, 3, 12);
比较和排序这些将按预期工作,以下情况也将如此:
if(today == DateTime.Today){
Console.WriteLine("Today is the day!");
}
换句话说,你应该完全没错,只是假装时间部分不存在。
此外,当您在OP中触及自己时,如果您想确保避免使用任何时间组件,则可以使用属性Date
:
// Note the addition of hours, minutes and seconds:
var today = new DateTime(2014, 3, 11, 14, 35, 33);
if(today == DateTime.Today){
Console.WriteLine("This never happened...");
}
if(today.Date == DateTime.Today){
Console.WriteLine("...But today is still the day!");
}
答案 3 :(得分:-1)
DateTime
确实有日期和时间。您可以自己决定在特定属性中,您永远不会使用日期部分。它只是12:00 AM
,但您不会使用它。
在某些情况下,编写自己永远不能保存时间组件的类型会很有用。这是一个开始:
struct Date : IFormattable
{
readonly DateTime value;
public Date(DateTime dateAndTime)
{
value = dateAndTime.Date;
}
public string ToString(string format, IFormatProvider formatProvider)
{
return value.ToString(format ?? "d", formatProvider);
}
public string ToString(string format)
{
return ToString(format, null);
}
public string ToString(IFormatProvider formatProvider)
{
return ToString(null, formatProvider);
}
public override string ToString()
{
return ToString(null, null);
}
public static implicit operator DateTime(Date date)
{
return date.value;
}
}
字段value
确实保留了上午12点的内容,但它是private
,并且从外部看不到。 ToString()
的重载确保除非请求其他内容,否则Date
将以当前文化的短日期格式写出。