【问题标题】:Converting datetime to date. Why so difficult in C#将日期时间转换为日期。为什么 C# 这么难
【发布时间】:2013-09-22 06:22:11
【问题描述】:

为什么在 C# 中将像 17/09/2013 00:00:00 这样的日期转换为简单的 2013/09/17 并将其保留为 DateTime 对象如此困难???

我不敢相信……

给定一个像 17/09/2013 00:00:00 这样的字符串,这就是我试图得到它并保持它的日期时间:

DateTime x = DateTime.Parse(String.Format(element.data, "yyyy-MM-dd")).Date;

什么都没有,它不断添加那些 00:00:00

DateTime x = DateTime.Parse(String.Format(element.data, "dd/MM/yyyy").Replace("/", "-")).Date;

什么都没有。

我尝试了其他十几个技巧和东西,但我没有成功......

MSDN 及其论坛上的所有示例都使用了字符串操作,我不希望这样做,因为我需要通过日期时间将日期传递给 Web 服务。

如何将 dd/MM/yyyy hh:mm:ss 格式的日期时间转换为仅 yyyy-MM-dd 保持日期时间?

谢谢大家

【问题讨论】:

  • 类型称为日期时间。它总是有时间。您可以将其转换为没有时间的字符串。
  • 你如何将它传递给网络服务?
  • 您将在调试器中看到的内容(表示日期/时间的字符串)与对象的值混淆了。你不需要投射任何东西,你可以按原样传递。
  • DateTime 包含DateTime,当您仅提取Date 时,Time 部分将被截断。问题是你必须使用一些日期时间格式来显示DateTime,它没有任何集成格式,它只是data structure
  • 如果你想要日期的字符串表示,只需使用x.ToString("dd-MM-yyyy");

标签: c# datetime time format converter


【解决方案1】:

/ 是您文化的日期分隔符的占位符,因此您需要使用 CultureInfo.InvariantCulture 使其工作:

DateTime.ParseExact(element.data, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

Demo

The "/" Custom Format Specifier

如果你想把它转换成这样格式的字符串:2013/09/17:

string str = dt.ToString("yyyy/MM/dd",  CultureInfo.InvariantCulture);

【讨论】:

    【解决方案2】:

    DateTime 没有format。 DateTime 始终包含日期和时间。因此,没有time 就不可能有DateTime。你可以这样尝试:-

    DateTime dt = DateTime.ParseExact(yourObject.ToString(), "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
    
    string s = dt.ToString("dd/MM/yyyy");
    

    【讨论】:

    • 如果您的文化中的日期分隔符不是 /,则将不起作用。
    【解决方案3】:

    DateTime 没有“格式”,它只包含年、月、日、小时、分钟和秒。您只能在将日期转换为字符串时对其进行格式化。

    DateTime 总是包含日期和时间!没有时间你就不能拥有DateTime

    【讨论】:

      【解决方案4】:

      正如其他人所说,DateTime 类型始终是一个日期一个时间。您可以拨打.Date将时间设置为午夜,但无法删除。

      在内部,DateTime 类型由一个二进制值表示,其中包括自 0001 年 1 月 1 日以来Ticks 的数量(按 ISO8601/公历)。一个滴答声是 100 纳秒。它还包括控制.Kind 的两个位,表示基准是UTC、本地系统时区还是“未指定”——这意味着它可以来自任何地方。

      它不会在任何地方尝试省略值的时间部分,也不会在内部存储字符串。

      如果您只想将日期作为字符串发出,那么您可以随时执行以下操作:

      DateTime myDateTime = DateTime.Now;
      string justTheDate = myDateTime.ToString("yyyy-MM-dd");
      

      如果您正在寻找纯粹的“没有时间的日期”类型(不仅仅是字符串表示),请仔细查看 Noda Time。它提供了一个名为LocalDate 的类型,正是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-17
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        • 2014-07-01
        • 1970-01-01
        相关资源
        最近更新 更多