2014-10-02 71 views
-3

如何将日期格式转换为以下格式:2014-02-06T17:20:28.107Z :1/28/2014 18: 07如何将日期时间与偏移量转换为MM/dd/yyyy hh:mm

我尝试这样做:

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

    return dt.ToString(); 
} 

其中返回的格式异常

+6

这个问题/这个问题的许多变种已经在SO之前被问及和回答。请使用这个网站作为资源,在你看过之前不要问一个问题:( – jbutler483 2014-10-02 16:09:35

+0

你不觉得我看上去了吗? – user1526912 2014-10-02 16:11:05

+1

我还是无法弄清楚日期的日期,月份和时间是如何变化的? – Habib 2014-10-02 16:11:28

回答

3

它看起来像你试图格式化字符串时分析,而不是当你打印出来。

ParseExact method,格式参数是什么格式的输入预计在。

要格式化的输出来代替。

由于输入看起来像ISO8601,所以简单的解析就可以工作。

我想你想要做的是更容易:

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

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

我没有Visual Studio的,所以我没有办法现在对它进行测试,但是这绝对接近你要做什么。

+0

它绝对是比较安全的,但在这个具体的例子中并不需要,是吗?主要是因为输入看起来是一个标准的ISO日期/时间格式。 上面看起来似乎是最快的解决方案,但如果输入发生改变或类似的情况发生,可能会造成麻烦。 – NealSr 2014-10-02 16:28:46

+0

对不起,没有看到你的答案的部分,我不知道这是一个标准格式:) – 2014-10-02 16:30:45

-2

是从字符串数据的DateTimeOffset类型来了吗?如果是这样,您可以通过属性date.DateTime访问DateTime版本(在这种情况下,DateTimeOffset类型不是字符串)。

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

+0

Im从APi作为一个字符串拉日期:2014年-02-06T17:20:28.107Z – user1526912 2014-10-02 16:12:23

1

您的模式与您的输入格式完全不符。它看起来像你不明白它是如何工作的

首先应用Parse与适当的模式获取DateTime,然后将其转换为具有正确模式的字符串后。

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会起作用。我的文章主要是为了解释你想要忽略的地方,以及如何使用“解析”。