【问题标题】:Remove hours:seconds:milliseconds in DateTime object删除 DateTime 对象中的小时:秒:毫秒
【发布时间】:2011-05-23 21:11:50
【问题描述】:

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

通常DateTime 对象是mm:dd:yyyy hrs:min:sec AM/PM

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

【问题讨论】:

  • 知道你得到了一个正确的答案 :) 只是想提示你到这个页面:msdn.microsoft.com/en-us/library/az4se3k1(v=VS.100).aspx 这是我通常使用的日期格式的一个很好的资源:)
  • 通常 DateTime 对象以 mm:dd:yyyy hrs:min:sec AM/PM 的形式出现。 - 不,它没有。如果这样做,那将是一个可怕的设计决定!我认为您忘记了 DateTime.ToString 的输出取决于您当前的文化。

标签: c# .net asp.net datetime datetime-format


【解决方案1】:

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

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

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

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

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

【讨论】:

  • OP 说他正在创建一个字符串,所以我认为你应该在你的回答中说是的:-D
  • 我喜欢这个解决方案,因为我在查询外部网络服务时需要它作为字符串:)
  • 不要试图将日期时间转换为字符串来操作它!这是一种糟糕的形式,并且比从其组件构建当前日期时间要慢得多。
【解决方案2】:

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

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

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

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

【讨论】:

  • 这可能是扁平化日期时间的最佳方式。
【解决方案3】:
datetime DateWithTimeNoSeconds = 
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute);

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

【讨论】:

  • 您应该只执行一次DateTime.Now,将结果保存在一个变量中并使用该变量,否则您可能会构建一个休息一小时甚至一天的DateWithTimeNoSeconds(如果使用在小时/天的轮到)。示例:var now = DateTime.Now; now = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0);
【解决方案4】:

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

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

msdn

【讨论】:

    【解决方案5】:
    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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

      • +1 表示DateTime.ToShortDateString()。我只是在我的回答中写了这个,然后发现你也发布了完全相同的建议。
      • 哇,153-er 的表现优于 100379-er。一定是我的幸运日:-)。谢谢!
      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

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

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

        简称

        var dt = DateTime.Parse(DateTime.Now.ToShortDateString());
        

        【讨论】:

          【解决方案9】:

          类似这样的日期和时间,没有秒数:

          private DateTime _startTime;
          public DateTime StartTime 
          { 
              get { return _startTime; } 
              set 
              { 
                  _startTime = value.AddSeconds(-value.Second)
                                    .AddMilliseconds(-value.Millisecond);   
              }
          }
          

          【讨论】:

            【解决方案10】:

            你可以使用:

            var newDate = new DateTime(oldDate.Year, oldDate.Month, oldDate.Day, 0, 0, 0);
            

            【讨论】:

              猜你喜欢
              • 2017-08-21
              • 1970-01-01
              • 2012-06-08
              • 2015-10-21
              • 2021-05-26
              • 1970-01-01
              • 2017-02-06
              • 1970-01-01
              • 2015-01-10
              相关资源
              最近更新 更多