2016-05-23 39 views
-2

我有一個字符串,它看起來像5/27/2015 4:49:54 AM如何將日期字符串從'M/d/yyyy h:mm:ss tt'轉換爲'yyyy-dd-mmTHH:mm:ss'? C#

我需要它是這種格式:2015-27-05T04:49:54+08:00

我試着將它像這樣,但它拋出一個錯誤:

var convertedDate = DateTime.ParseExact(originalDate, "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK", 
          new CultureInfo("en-US", true)); 

我也嘗試像這樣轉換它,但它似乎沒有做任何事情,轉換日期結束了與originalDate相同:

var convertedDate = String.Format("{0:u}", originalDate); 
+0

你有一個字符串'「2015/5/27 4:49:54」'並使用'「yyyy' - 'MM' - 'dd'T'HH':'mm':'ss.fffffffK」 '作爲'ParseExact'中的格式字符串?當然這是行不通的。 –

+0

您需要提供您想要解析*的格式,而不是。這給了你一個DateTime。但是,您似乎需要添加偏移量,因此[DateTimeOffset](https://msdn.microsoft.com/en-us/library/system.datetimeoffset%28v=vs.110%29.aspx)類型可能是更有用。或者[Noda Time](https://github.com/nodatime/nodatime)可能更易於使用。 –

+0

@TimSchmelter說「當然不起作用」並不會有任何幫助。 –

回答

1

您需要先解析,然後使用您所需的格式字符串與ToString翻譯。

試試這個:

string input = "5/27/2015 4:49:54 AM"; 
DateTime originalDate = DateTime.Parse(input); 
string output = originalDate.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK"); 

您可以根據需要與DateTime.ParseExact換出DateTime.ParseDateTime.Parse將嘗試使用您的系統文化進行分析。如果你需要/想要,你可以更具體。

另外,請記住格式字符串中的f會創建一個必需的小數。要符合您的規定輸出,您應該使用F或省略。

https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

0

嘗試convertedDate.ToString("yyyy-MM-ddThh:mm:sszzz"),本地機器上的日期和時間設置可能會影響輸出的格式,因此您不能始終依賴內置的格式化字符串。

1

首先將原始的string解析爲DateTime。然後將DateTime格式化爲所需格式的string

var originalDate = "5/27/2015 4:49:54 AM"; 
var result = DateTime.ParseExact(originalDate, "M/d/yyyy h:mm:ss tt", CultureInfo.CurrentCulture) 
    .ToString("yyyy'-'MM'-'dd'T'HH':'mm':'sszzzz"); 
Console.WriteLine(result); 

輸出

2015-05-27T04:49:54-04:00

注意的是,時區偏移你將依賴於機器的文化,是因爲它不是在原來的字符串指定運行上。

0

爲了解析"5/27/2015 4:49:54 AM"你應該使用這個格式字符串:"M/d/yyyy h:mm:ss tt"

DateTime convertedDate = DateTime.ParseExact(
    "5/27/2015 4:49:54 AM", 
    "M/d/yyyy h:mm:ss tt", 
    new CultureInfo("en-US", true)); 

然後你可以使用DateTime.ToString與所需的格式字符串這似乎是"yyyy-dd-MM'T'hh:mm:sszzz"得到2015-27-05T04:49:54+08:00作爲輸出:

string result = convertedDate.ToString("yyyy-dd-MM'T'hh:mm:sszzz"); // zzz to get UTC offset 

參見:The "zzz" Custom Format Specifier

1

試試看看這個代碼。

string inputString = "05/27/2015 04:49:54 AM"; 

DateTime dt = DateTime.ParseExact(inputString, "M/dd/yyyy H:mm:ss tt", 
System.Globalization.CultureInfo.InvariantCulture); 

string outputString = dt.ToString("yyyy-MM-ddTHH:mm:sszzz"); 

輸出字符串將返回值爲「2015-05-27T04:49:54 + 08:00」。