【问题标题】:C# Getting Just Date From TimestampC# 从时间戳中获取日期
【发布时间】:2011-02-20 21:54:11
【问题描述】:

如果我的时间戳格式为:yyyy-mm-dd hh:mm:ss:mmm

如何从时间戳中提取日期?

例如,如果时间戳显示为:“2010-05-18 08:36:52:236”,那么从中获取 2010-05-18 的最佳方法是什么。

我要做的是隔离时间戳的日期部分,为其定义自定义时间以创建新的时间戳。有没有更有效的方法来定义时间戳的时间,而无需先取出日期,然后添加新时间?

【问题讨论】:

  • 您需要一个字符串表示的只是删除时间部分的日期?

标签: c# sql timestamp


【解决方案1】:

DateTime.Parse("2010-05-18 08:36:52:236").ToString("yyyy-MM-dd");

【讨论】:

  • 您有机会阅读我的问题的第二部分吗?如果有一种首选的方法可以做到这一点,我真的很想知道。否则,您在这里写的内容似乎是合法的,谢谢。
  • 那么“更高效”是什么意思?如果您想要更快,您可以将不同的方法与分析器进行比较?我认为 Andomar 建议的方法会更快? (子字符串)
  • 在我的机器上给出String was not recognized as a valid DateTime. 异常
  • 是的,你应该在某处使用 CultureInfo.InvariantCulture
【解决方案2】:

您应该使用DateTime 类型:

DateTime original = DateTime.Parse(str);
DateTime modified = original.Date + new TimeSpan(13, 15, 00);
string str = modified.ToString("yyyy-MM-dd HH:mm:ss:fff");

您的格式不标准,因此您需要调用ParseExact 而不是Parse

DateTime original = DateTime.ParseExact(str, "yyyy-MM-dd HH:mm:ss:fff", CultureInfo.InvariantCulture);

【讨论】:

    【解决方案3】:

    你可以使用substring:

    "2010-05-18 08:36:52:236".Substring(0, 10);
    

    或者使用ParseExact:

    DateTime.ParseExact("2010-05-18 08:36:52:236", 
                        "yyyy-MM-dd HH:mm:ss:fff", 
                        CultureInfo.InvariantCulture)
            .ToString("yyyy-MM-dd");
    

    【讨论】:

      【解决方案4】:
      DateTime date;
      if (DateTime.TryParse(dateString, out date))
      {
         date = date.Date; // Get's the date-only component.
         // Do something cool.
      }
      else
      {
         // Flip out because you didn't get a real date.
      }
      

      【讨论】:

        【解决方案5】:

        在 DateTime 上获取 .Date 成员

        DateTime date = DateTime.Now;
        DateTime midnightDate = date.Date;
        

        【讨论】:

          【解决方案6】:

          像这样使用它:

          var x = DateTime.Now.Date; //will give you midnight today
          
          x.AddDays(1).AddTicks(-1); //use these method calls to modify the date to whats needed.
          

          【讨论】:

          • 日期时间是不可变的。您无法修改日期 - 您正在创建一个新日期,而您碰巧将其丢弃而不是存储在变量中。
          【解决方案7】:

          最好(也是最快)的方法是将日期转换为整数,因为时间部分存储在小数部分中。

          试试这个:

          select convert(datetime,convert(int, @yourdate))
          

          所以你把它转换成一个整数,然后再转换回一个数据,瞧,时间部分就消失了。

          当然,从原始值中减去这个结果只会得到时间部分。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-18
            • 2012-07-10
            • 1970-01-01
            • 1970-01-01
            • 2011-11-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多