我正在尝试从产生格式的 DateTime 对象创建一个字符串mm:dd:yyyy
。
按照惯例,DateTime
对象以mm:dd:yyyy hrs:min:sec AM/PM
.
有没有办法快速删除hrs:min:sec AM/PM
DateTime 的一部分,这样当我转换它时ToString()
它只会导致mm:dd:yyyy
?
我正在尝试从产生格式的 DateTime 对象创建一个字符串mm:dd:yyyy
。
按照惯例,DateTime
对象以mm:dd:yyyy hrs:min:sec AM/PM
.
有没有办法快速删除hrs:min:sec AM/PM
DateTime 的一部分,这样当我转换它时ToString()
它只会导致mm:dd:yyyy
?
要回答您的问题,不 - 您必须将其存储在不同的类型中。最简单的选择是使用字符串。
string date = dateTime.ToString("MM:dd:yyyy");
但是,我也强烈建议不要在程序内部将日期存储为字符串。这将使对它们进行任何计算或比较变得困难。此外,我建议您不要为您的日期表示强制使用特定的文化,因为这意味着您的应用程序可能无法在您的其他文化中按预期工作。
一种稍微复杂的方法是创建一个覆盖 ToString 的自定义类。不过,我也会避免这种情况,因为将您的类型与标准库函数一起使用仍然很困难。您将不得不一直来回转换。
只需将其保留为 DateTime 并仅在表示层中转换为字符串。您可以使用DateTime.ToShortDateString
打印用户友好的文化感知字符串。
虽然在大多数情况下我同意 Mark Byers 的观点,但我有一种情况,我需要存储一个仅精确到小时的日期时间。存储分钟和秒不仅是多余的,而且是不准确的。用户只需选择日期和小时,因此虽然日期和小时将由用户选择,但分钟和秒将设置为当前时间。
在这种情况下,删除分钟和秒非常容易。这是代码:
scheduledDate = scheduledDate.AddMinutes(
scheduledDate.Minute * -1).AddSeconds(
scheduledDate.Second * -1);
然后我将它作为完整的日期时间存储在数据库中,分钟和秒始终为 0。
如果要从DateTime
对象中删除小时、秒、毫秒(重置为 0)而不转换为字符串,可以使用该Date
属性。
// Get date-only portion of date, without its time.
var date = DateTime.Now.Date;
datetime DateWithTimeNoSeconds =
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute);
这将获取当前日期和时间的日期并添加小时和分钟。
DateTime date1 = new DateTime(2008, 6, 1, 7, 47, 0);
Console.WriteLine(date1.ToString());
// Get date-only portion of date, without its time.
DateTime dateOnly = date1.Date;
// Display date using short date string.
Console.WriteLine(dateOnly.ToString("d"));
// Display date using 24-hour clock.
Console.WriteLine(dateOnly.ToString("g"));
Console.WriteLine(dateOnly.ToString("MM/dd/yyyy HH:mm"));
// The example displays the following output to the console:
// 6/1/2008 7:47:00 AM
// 6/1/2008
// 6/1/2008 12:00 AM
// 06/01/2008 00:00
http://msdn.microsoft.com/en-us/library/system.datetime.date.aspx
通常,我使用DateTime.ToShortDateString()以Culture
感知方式转换为字符串。
这样,您可以将其格式化为日期,仅尊重当前线程设置的区域性的当前格式。
大约DateTime.AddMinutes
(或秒或小时)如果您想删除而不是添加,只需添加一个负数!
简单的方法,可能不是最好的,但
DateTime dt = new DateTime();
dt = DateTime.Now;
string sdate = dt.ToShortDateString();
dt = DateTime.Parse(sdate);
或简称
var dt = DateTime.Parse(DateTime.Now.ToShortDateString());
没有秒的日期和时间是这样的:
private DateTime _startTime;
public DateTime StartTime
{
get { return _startTime; }
set
{
_startTime = value.AddSeconds(-value.Second)
.AddMilliseconds(-value.Millisecond);
}
}
您可以使用:
var newDate = new DateTime(oldDate.Year, oldDate.Month, oldDate.Day, 0, 0, 0);