【问题标题】:How can I change the format of a DateTime value? [duplicate]如何更改 DateTime 值的格式? [复制]
【发布时间】:2017-07-31 20:04:16
【问题描述】:

使用 C#/.NET 我正在尝试转换日期时间格式。 我以这种格式接收03/10/2017 (MM/dd/yyyy) dateTime。我想将其转换为yyyy-MM-dd hh:mm:ss 格式。

string fromdate = from.ToString("yyyy-MM-dd HH:mm:ss");
string format1 = "yyyy-MM-dd HH:mm:ss";
var dateTime = DateTime.ParseExact(fromdate, format1, new CultureInfo("sv-se"), DateTimeStyles.AssumeLocal);

这是我尝试过的。 fromdate 是我想要的格式,但是当我尝试将 string 转换为 dateTime 格式时,它返回的格式与我尝试运行的格式相同(MM/DD/YYY)。

【问题讨论】:

  • 那么,如果这是 C#,你为什么要把它标记为 VB.NET 并将其包含在你的标题中?你知道它们不是一回事吗?
  • 您的问题正文显示为“C#”,但标题和标签显示为 vb.net?
  • 另外,DateTime object 没有“格式”。格式适用于您从ToString 获得的字符串表示。
  • 您如何查看日期?这就是您需要更改的内容,以使其按照您想要的方式进行格式化。
  • 什么是from?请发布一个实际重现该问题的示例。了解"yyyy-MM-dd HH:mm:ss" 格式的唯一内置类型是DateTime 和DateTimeOffset。不过,在这种情况下,您不需要解析任何内容

标签: c# .net datetime type-conversion


【解决方案1】:

您尚未在代码中指定“来自”的内容。所以我只是假设这是一个包含日期的随机对象。在这种情况下,您可以执行以下操作

var from = DateTime.Now; //We don't know what this is so let's set it as var
DateTime dteFrom = Convert.ToDateTime(from); //Let's convert this to an actual date so we can convert it to a formatted string

string fromdate = String.Format("{0:yyyy-MM-dd HH:mm:ss}", dteFrom);

注意:我尚未测试此代码,因此它可能不是最“最佳”的执行方式,也可能无法正常工作,但它应该可以很好地说明如何进行。

【讨论】:

  • from 是 dateTime 格式。我收到的格式是:“MM/DD/YYYY”。我想将其转换为 YYYY-MM-dd 类型格式。当我将 from 转换为字符串时,它会转换为我想要的格式,但是当我尝试将其从 STRING 转换为 DATETIME 格式时,它再次导致“MM/DD/YYYY in this form
【解决方案2】:

...但是当我尝试将字符串转换为 dateTime 格式时,它返回的格式与我尝试运行的格式 (MM/DD/YYY) 相同。

参考

string fromdate = from.ToString("yyyy-MM-dd HH:mm:ss");

我的假设是:

  1. from 实际上是一个string 实例,而您正试图将其视为DateTime 并使用DateTime 的格式字符串(然后期望它被格式化)。将格式字符串传递给 string 实例时,格式将被忽略并返回原始的 string,这就是您看不到任何更改的原因。
  2. 您实际上在您的真实代码中使用string.Format,就像这样(请注意,如果不是这种情况,您将收到fromdate.ToString 的编译错误,或者如果fromdate 是DateTime 实例,您的代码可以工作,你不会问这个问题)

    var fromdate = "03/10/2017";
    var fromdateStr = string.Format("{0:yyyy-MM-dd HH:mm:ss}", fromdate);
    Console.WriteLine(fromdateStr); // output "03/10/2017"
    

要解决此问题,首先使用Parse 或ParseExact 将from 转换为DateTime。理想情况下,这部分代码甚至不允许 from 成为字符串,它应该是 DateTime 实例。查看您的堆栈时,规则应该是这样的。

  • 来自来自表示层(输入):尽可能尽早转换为正确的类型。
  • 从商店返回到表示(输入)层:尽可能延迟转换为字符串表示(用于查看)

更好的是让绑定控件为您处理这个问题,但这完全取决于您的表示层是什么。

【讨论】:

  • from 将以 DATETIME 格式作为函数的输入。我想要的只是在 yyyy-MM-dd HH:mm:ss 中以这种格式和类型为 DATETIME 有我的 from。现在它在 MM/DD/YYYY
  • @Ali 那么这个问题根本没有意义。 DateTime 没有格式,它是一个二进制值。充其量,你会得到完全相同的值,只是修剪毫秒
  • @PanagiotisKanavos 是的,我想通了。我对现有代码进行了更改,它与我得到的输入一起工作。谢谢你的帮助:)
【解决方案3】:
string stringDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2012-05-27
    • 2018-01-14
    • 2020-02-08
    相关资源
    最近更新 更多