我正在开发我的第一个完整的 C# 项目。我正在为 Windows 应用商店应用程序/Windows Phone 应用程序编写一个可移植的类库,但我实际上遇到了 DateTime.ParseExact 和 DateTime.TryParseExact 的问题。
我试图转换为 DateTime 的字符串实际上是祖鲁语。该示例如下所示:
2012-09-14T04:42:25.117Z
2012-08-17T04:39:51.215Z
如您所见,我们在这里达到毫秒级。以下是正在使用的代码:
DateTime _createdAt = DateTime.ParseExact(dateTime, TIMEFORMATTER,
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal);
return _createdAt;
TIMEFORMATTER 是一个在顶部声明的 const:
const string TIMEFORMATTER = "yyyy-MM-ddTHH:mm:ss.fffZ"
我一直在阅读许多 SO 帖子,以寻找解决问题的方法。我认为这个就可以了,但事实并非如此。
如果有人能指出我正确的方向,我将不胜感激。我只在 VB.net 中使用过 Date 对象。
编辑:从库中添加附加代码以显示完整说明
if (details.ContainsKey("created_at"))
{
var time = details["created_at"].Stringify();
Debug.WriteLine(time);
DateTime _createdAt = FormatDateTime(time);
Debug.WriteLine(_createdAt.ToLocalTime());
Asana.Projects[indexOfProject].CreatedAt = _createdAt;
}
public static DateTime FormatDateTime(string dateTime)
{
DateTime _createdAt = new DateTime();
// 2012-09-14T04:42:25.117Z
DateTime.TryParse(dateTime, out _createdAt);
return _createdAt;
}
这是要调试的内容:
"2012-08-17T04:39:52.878Z"
1/1/0001 12:00:00 AM
"2012-08-17T05:17:12.530Z"
1/1/0001 12:00:00 AM
"2012-09-09T04:23:08.805Z"
1/1/0001 12:00:00 AM
"2012-08-17T04:39:51.215Z"
1/1/0001 12:00:00 AM
"2012-09-14T05:12:22.056Z"
1/1/0001 12:00:00 AM
"2012-08-06T04:51:10.662Z"
1/1/0001 12:00:00 AM
"2012-09-14T04:40:56.602Z"
1/1/0001 12:00:00 AM
"2012-08-17T04:52:33.264Z"
1/1/0001 12:00:00 AM
"2012-09-14T04:43:50.953Z"
1/1/0001 12:00:00 AM
"2012-09-13T06:07:16.530Z"
1/1/0001 12:00:00 AM
"2012-09-14T04:42:25.117Z"
1/1/0001 12:00:00 AM
解决方案
在 Jeremy Thompson 的帮助下,我实际上能够调试自己的错误。原来这是我第一次在 .Net 中使用 JSON 数据(用于 Python)。
.Stringify() 和 .GetString() 在获取字符串文本时做了完全不同的事情。我打开了一个新的控制台程序并使用 Jeremy 的代码来产生与他相同的结果。完美地工作。当我回到我的图书馆时,我在返回的一些字符串上遇到了格式问题。然后我发现在调试窗口中我得到了 JSON 数据的引号。
新的工作代码如下:
// From the depths of a method
if (details.ContainsKey("created_at"))
{
var time = details["created_at"].GetString();
DateTime _createdAt = FormatDateTime(time);
Asana.Projects[indexOfProject].CreatedAt = _createdAt;
Debug.WriteLine(Asana.Projects[indexOfProject].CreatedAt.ToLocalTime());
}
以及新的 FormatDateTime 方法(事实证明并不是那么新……):
public static DateTime FormatDateTime(string dateTime)
{
DateTime _createdAt = new DateTime();
DateTime.TryParseExact(dateTime, TIMEFORMATTER, CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal, out _createdAt);
return _createdAt;
}
一些示例输入/输出:
2012-09-14T04:43:42.060Z
9/13/2012 10:43:42 PM
2012-09-09T04:23:08.805Z
9/8/2012 10:23:08 PM
2012-08-06T04:51:10.662Z
8/5/2012 10:51:10 PM
非常感谢那些正在寻找和思考它的人。