C# 如何将带偏移量的日期时间转换为MM/dd/yyyy hh:MM

C# 如何将带偏移量的日期时间转换为MM/dd/yyyy hh:MM,c#,C#,如何以这种格式记录日期:2014-02-06T17:20:28.107Z 转换为该确切格式:1/28/2014 18:07 我试过这个: public string FormatDate(string date) { DateTime dt = DateTime.ParseExact(date.ToString(), "MM/dd/yyyy hh:mm", CultureInfo.InvariantCulture); return dt.ToString(); } 返回格式异

如何以这种格式记录日期:2014-02-06T17:20:28.107Z 转换为该确切格式:1/28/2014 18:07

我试过这个:

public string FormatDate(string date)
{
    DateTime dt = DateTime.ParseExact(date.ToString(), "MM/dd/yyyy hh:mm", CultureInfo.InvariantCulture);

    return dt.ToString();
}

返回格式异常的字符串是否来自DateTimeOffset数据类型?如果是这样,您可以通过属性date.DateTime访问DateTime版本(在这种情况下,日期将是DateTimeOffset类型,而不是字符串)


如果它直接以字符串的形式出现,那么可能首先尝试解析为DateTimeOffset?

看起来您是在解析时尝试格式化字符串,而不是在打印时

从中,format参数是输入的预期格式

您希望格式化输出

因为输入看起来像ISO8601,一个简单的解析就可以了

我认为你想做的更有可能是:

public string FormatDate(string date)
{
    DateTime dt = DateTime.Parse(date);

    return dt.ToString("MM/dd/yyyy hh:mm", CultureInfo.InvariantCulture);
}

我没有Visual Studio,所以我现在没有办法测试它,但这肯定更接近您的目标。

您的模式与您的输入格式完全不一致。看起来你不明白它是怎么工作的

首先应用具有适当模式的解析来获取日期时间,然后将其转换为具有正确模式的字符串

DateTime dt = DateTime.ParseExact("2014-02-06T17:20:28.107", "yyyy-MM-ddTHH:mm:ss.FFFZ", CultureInfo.InvariantCulture);

return dt.ToString("MM/dd/yyyy HH:mm");
在本例中,“return”将生成一个包含“02/06/2014 05:20”的字符串


上面的模式似乎是显式解析格式所需的模式,尽管可能有一些预定义的快捷方式,但您的日期看起来是标准的ISO模式,因此简单的解析可能会起作用。我的帖子主要是为了解释你在哪里会漏掉要点,以及应该如何使用“parse”。

这个问题/这个问题的许多变体在此之前已经被问过并回答过了。请将此网站用作资源,在查看之前不要问任何问题:(你不认为我已经查看了吗?我仍然不知道日期、月份和时间是如何变化的?或者。此列表可以很容易地继续:(我从APi中提取日期作为字符串:2014-02-06T17:20:28.107ZIt肯定更安全,但在这个特定示例中不需要它,是吗?主要是因为输入似乎是标准的ISO日期/时间格式。最快的解决方案似乎在上面,但如果输入发生更改或类似的情况,可能会造成麻烦。抱歉,没有看到你回答的那部分,我不知道这是标准格式:)