20

我正在尝试从产生格式的 DateTime 对象创建一个字符串mm:dd:yyyy

按照惯例,DateTime对象以mm:dd:yyyy hrs:min:sec AM/PM.

有没有办法快速删除hrs:min:sec AM/PMDateTime 的一部分,这样当我转换它时ToString()它只会导致mm:dd:yyyy

4

10 回答 10

14

要回答您的问题,不 - 您必须将其存储在不同的类型中。最简单的选择是使用字符串。

string date = dateTime.ToString("MM:dd:yyyy");

但是,我也强烈建议不要在程序内部将日期存储为字符串。这将使对它们进行任何计算或比较变得困难。此外,我建议您不要为您的日期表示强制使用特定的文化,因为这意味着您的应用程序可能无法在您的其他文化中按预期工作。

一种稍微复杂的方法是创建一个覆盖 ToString 的自定义类。不过,我也会避免这种情况,因为将您的类型与标准库函数一起使用仍然很困难。您将不得不一直来回转换。

只需将其保留为 DateTime 并仅在表示层中转换为字符串。您可以使用DateTime.ToShortDateString打印用户友好的文化感知字符串。

于 2010-12-11T08:06:31.043 回答
13

虽然在大多数情况下我同意 Mark Byers 的观​​点,但我有一种情况,我需要存储一个仅精确到小时的日期时间。存储分钟和秒不仅是多余的,而且是不准确的。用户只需选择日期和小时,因此虽然日期和小时将由用户选择,但分钟和秒将设置为当前时间。

在这种情况下,删除分钟和秒非常容易。这是代码:

scheduledDate = scheduledDate.AddMinutes(
    scheduledDate.Minute * -1).AddSeconds(
    scheduledDate.Second * -1);

然后我将它作为完整的日期时间存储在数据库中,分钟和秒始终为 0。

于 2013-09-07T16:48:43.087 回答
12

如果要从DateTime对象中删除小时、秒、毫秒(重置为 0)而不转换为字符串,可以使用该Date属性。

// Get date-only portion of date, without its time.
var date = DateTime.Now.Date;

微软

于 2018-05-30T12:58:25.953 回答
11
datetime DateWithTimeNoSeconds = 
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute);

这将获取当前日期和时间的日期并添加小时和分钟。

于 2012-02-22T16:52:58.753 回答
9
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

于 2010-12-11T08:09:14.320 回答
8

通常,我使用DateTime.ToShortDateString()Culture感知方式转换为字符串。

这样,您可以将其格式化为日期,仅尊重当前线程设置的区域性的当前格式。

于 2010-12-11T08:15:01.543 回答
2

大约DateTime.AddMinutes(或秒或小时)如果您想删除而不是添加,只需添加一个负数!

于 2012-03-26T09:17:11.023 回答
2

简单的方法,可能不是最好的,但

DateTime dt = new DateTime();
dt = DateTime.Now;
string sdate = dt.ToShortDateString();
dt = DateTime.Parse(sdate);

或简称

var dt = DateTime.Parse(DateTime.Now.ToShortDateString());
于 2014-09-15T15:52:09.540 回答
0

没有秒的日期和时间是这样的:

private DateTime _startTime;
public DateTime StartTime 
{ 
    get { return _startTime; } 
    set 
    { 
        _startTime = value.AddSeconds(-value.Second)
                          .AddMilliseconds(-value.Millisecond);   
    }
}
于 2017-01-07T01:48:49.343 回答
0

您可以使用:

var newDate = new DateTime(oldDate.Year, oldDate.Month, oldDate.Day, 0, 0, 0);
于 2021-09-27T17:13:50.957 回答