我的字符串看起来像5/27/2015 4:49:54 AM
我需要它采用以下格式: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));
我也试过像这样转换它但它似乎没有做任何事情,convertedDate最终与originalDate相同:
var convertedDate = String.Format("{0:u}", originalDate);
答案 0 :(得分: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
请注意,您获得的时区偏移量取决于运行的计算机的文化,因为它未在原始字符串中指定。
答案 1 :(得分: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.Parse
换成DateTime.ParseExact
。 DateTime.Parse
将尝试使用您的系统文化进行解析。如果您需要/想要,您可以更具体。
另外,请记住格式字符串中的f
会创建必需的小数。要匹配您的规定输出,您应使用F
或省略。
https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
答案 2 :(得分: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”。
答案 3 :(得分:0)
尝试convertedDate.ToString("yyyy-MM-ddThh:mm:sszzz")
,本地计算机上的日期和时间设置可能会影响输出的格式,因此您无法始终依赖内置格式字符串。
答案 4 :(得分: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