DateTime.ParseExact抛出异常

时间:2017-02-20 12:02:41

标签: c# datetime string-to-datetime

我很确定我犯了一些非常愚蠢的错误,但这让我感到疯狂。

我正在尝试执行以下操作:

onRender("
           function(el, x) {
           var myGraph = document.getElementById(el.id);
           el.on('plotly_click', function(e) {
            var pts = '';
            for(var i=0; i < e.points.length; i++){
            var annotate_text = 'x = '+e.points[i].x +
            'y = '+e.points[i].y.toPrecision(4);

             var annotation = {
            text: annotate_text,
            x: e.points[i].x,
             y: parseFloat(e.points[i].y.toPrecision(4))
             }

            annotations = el.layout.annotations || [];
            annotations.push(annotation);
            Plotly.relayout(el.id,{annotations: annotations})
            }
           })}
           ") 

但是我一直得到以下异常:“字符串未被识别为有效的DateTime。”

我试过了: “M / dd / yyyy HH:mm:ss tt” “MM'/'dd'/'yyyy HH:mm:ss tt” “M'/'dd'/'yyyy HH:mm:ss tt”

但到目前为止没有任何工作......任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:7)

HH正在寻找24小时格式,但您也传入AM并指定tt - 解析器无法处理。您需要查找基于12小时的字符串:

var dateTime = DateTime.ParseExact("08/24/2016 12:00:00 AM", "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

使用hh,或删除AM / tt部分。

答案 1 :(得分:2)

24小时格式使用hh 12小时格式而不是HH格式。此信息已在AM/PM中,且无法通过该方法处理两次。

var dateTime = DateTime.ParseExact("08/24/2016 12:00:00 AM", "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

答案 2 :(得分:1)

您需要使用hh代替HH,因为HH用于24小时格式,并且您还指定格式为am pm

var dateTime = DateTime.ParseExact("08/24/2016 12:00:00 AM", "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);