如何将 angular-ui dateTime 字符串解析为 c# datetime
How to parse a angular-ui dateTime string to c# datetime
我知道很多关于这个的问题已经得到解答。我已经尝试了大约 3 个小时,但没有成功。我正在使用 angular-ui 日期时间选择器,格式是
"2015-02-08T06:00:00.000Z"
错误消息是字符串未被识别为日期时间
at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)
at System.DateTime.ParseExact(String s, String format, IFormatProvider provider)
at TransparentEnergy.Controllers.apiDocumentController.d__2.MoveNext() in c:\Development\TransparentEnergy\TransparentEnergy\ControllersAPI\apiDocumentController.cs:line 67
控制器
string docDate = provider.FormData["DocumentDate"];
model.DocumentDate = DateTime.ParseExact(docDate, "yyyy-MM-dd'T'HH:mm:ss'Z'", CultureInfo.GetCultureInfo("en-US"));
Angular-UI
$scope.open = function ($event) {
$event.preventDefault();
$event.stopPropagation();
$scope.opened = true;
};
$scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
$scope.format = $scope.formats[3];
更新
string docDate = provider.FormData["DocumentDate"];
model.DocumentDate = DateTime.ParseExact(docDate, "yyyy-MM-dd'T'HH:mm:ss.fff'Z'", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
查看您传递的格式:
"yyyy-MM-dd'T'HH:mm:ss'Z'"
没有毫秒,而您的样本是 "2015-02-08T06:00:00.000Z"
, 有毫秒。看起来你想要:
"yyyy-MM-dd'T'HH:mm:ss.fff'Z'"
此外,我建议使用 CultureInfo.InvariantCulture
而不是美国文化 - 在这种情况下它们的工作原理相同,但我认为当你基本上在说话时使用不变文化会更清楚关于机器对机器格式。
您还应该包括 DateTimeStyles.AssumeUniversal
以考虑 Z
。
您没有使用 DateTime.Parse() 有什么具体原因吗?
您指定的格式 "2015-02-08T06:00:00.000Z"
是 ISO 日期时间格式。参考http://en.wikipedia.org/wiki/ISO_8601
你显示的是UTC时间,你用的时候
DateTime.Parse("2015-02-08T06:00:00.000Z")
你得到本地日期时间。根据服务器 \ pc 的时区,您 运行 代码开启。
你可以使用
DateTime.Parse("2015-02-08T06:00:00.000Z").ToUniversalTime()
获取 UTC。有帮助吗?
试试这个格式
yyyy-MM-dd'T'HH:mm:ss.fff'Z'
var date = DateTime.ParseExact("2015-02-08T06:00:00.000Z", "yyyy-MM-dd'T'HH:mm:ss.fff'Z'", CultureInfo.InvariantCulture);
我知道很多关于这个的问题已经得到解答。我已经尝试了大约 3 个小时,但没有成功。我正在使用 angular-ui 日期时间选择器,格式是
"2015-02-08T06:00:00.000Z"
错误消息是字符串未被识别为日期时间
at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style) at System.DateTime.ParseExact(String s, String format, IFormatProvider provider) at TransparentEnergy.Controllers.apiDocumentController.d__2.MoveNext() in c:\Development\TransparentEnergy\TransparentEnergy\ControllersAPI\apiDocumentController.cs:line 67
控制器
string docDate = provider.FormData["DocumentDate"];
model.DocumentDate = DateTime.ParseExact(docDate, "yyyy-MM-dd'T'HH:mm:ss'Z'", CultureInfo.GetCultureInfo("en-US"));
Angular-UI
$scope.open = function ($event) {
$event.preventDefault();
$event.stopPropagation();
$scope.opened = true;
};
$scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
$scope.format = $scope.formats[3];
更新
string docDate = provider.FormData["DocumentDate"];
model.DocumentDate = DateTime.ParseExact(docDate, "yyyy-MM-dd'T'HH:mm:ss.fff'Z'", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
查看您传递的格式:
"yyyy-MM-dd'T'HH:mm:ss'Z'"
没有毫秒,而您的样本是 "2015-02-08T06:00:00.000Z"
, 有毫秒。看起来你想要:
"yyyy-MM-dd'T'HH:mm:ss.fff'Z'"
此外,我建议使用 CultureInfo.InvariantCulture
而不是美国文化 - 在这种情况下它们的工作原理相同,但我认为当你基本上在说话时使用不变文化会更清楚关于机器对机器格式。
您还应该包括 DateTimeStyles.AssumeUniversal
以考虑 Z
。
您没有使用 DateTime.Parse() 有什么具体原因吗?
您指定的格式 "2015-02-08T06:00:00.000Z"
是 ISO 日期时间格式。参考http://en.wikipedia.org/wiki/ISO_8601
你显示的是UTC时间,你用的时候
DateTime.Parse("2015-02-08T06:00:00.000Z")
你得到本地日期时间。根据服务器 \ pc 的时区,您 运行 代码开启。
你可以使用
DateTime.Parse("2015-02-08T06:00:00.000Z").ToUniversalTime()
获取 UTC。有帮助吗?
试试这个格式
yyyy-MM-dd'T'HH:mm:ss.fff'Z'
var date = DateTime.ParseExact("2015-02-08T06:00:00.000Z", "yyyy-MM-dd'T'HH:mm:ss.fff'Z'", CultureInfo.InvariantCulture);