首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在将字符串解析为日期时间时获取错误

在将字符串解析为日期时间时获取错误
EN

Stack Overflow用户
提问于 2017-01-04 14:59:21
回答 2查看 1.3K关注 0票数 0

我在CSV文件中有一个datetime值,下面是示例数据:

代码语言:javascript
复制
20/06/2016 11:52
21/06/2016 11:52
22/06/2016 11:52

不,当我试图解析这个日期时,我得到了错误:

字符串不能被识别为有效的DateTime。

我不知道这个日期的格式是什么,但是我总是希望在我的应用程序将要使用的那种文化中解析它。所以根据目前的文化,我想分析一下我的约会对象。

这就是我尝试的方式,但如上面所示,会出现错误:

代码语言:javascript
复制
string row = "20/06/2016 11:52" 

Try 1

代码语言:javascript
复制
CultureInfo culture = CultureInfo.CurrentCulture;
  DateTimeStyles styles = DateTimeStyles.None;
  DateTime dateValue;
  DateTime.TryParse(rowValue, culture, styles, out dateValue); // {1/1/0001 12:00:00 AM}

Try 2

代码语言:javascript
复制
 DateTimeFormatInfo usDtfi = new CultureInfo(culture.Name, false).DateTimeFormat;
  var l = Convert.ToDateTime(rowValue, usDtfi); //String was not recognized as a valid DateTime
  var g = DateTime.Parse(rowValue, usDtfi);//String was not recognized as a valid DateTime

所有这些方法都失败了,我希望有确切的日期,并希望存储在我的Server数据库表中。

我的系统日期时间是格式的:mm/dd/yy

我已经看到了以下几个问题:

String was not recognized as a valid DateTime " format dd/MM/yyyy"

Datetime format Issue: String was not recognized as a valid DateTime

但是所有这些答案都是指定日期格式的,但我不知道格式是什么;这就是为什么我试图从当前的文化中检测到的原因。我不知道我是否在正确地思考。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-04 15:35:22

如果您确信遇到的每个字符串都是正确的格式,但您只是不知道是哪一个字符串,那么您可以做的一件事是在计算机上获取所有不同格式的数组,并在解析精确方法中使用该数组:

代码语言:javascript
复制
var formats = (from CultureInfo ct in CultureInfo.GetCultures(CultureTypes.AllCultures)
               select ct.DateTimeFormat.GetAllDateTimePatterns()).SelectMany((x) => x).ToArray();
DateTime test = DateTime.ParseExact("20/06/2016 11:52", formats, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal);

我的机器上的代码产生了超过26,000种格式。只要字符串跟随其中一条,它就会被接受。

如果获得适当的格式不一致,则可以选择以下路线:

代码语言:javascript
复制
var formats = (from CultureInfo ct in CultureInfo.GetCultures(CultureTypes.AllCultures)
               select ct.DateTimeFormat);
string dateString = "20/06/2016 11:52";
DateTime temp = new DateTime(0);
foreach (DateTimeFormatInfo dfi in formats)
{
    if (DateTime.TryParseExact(dateString, dfi.GetAllDateTimePatterns(), dfi, DateTimeStyles.None, out temp))
    {
        break;
    }
}
if(temp == new DateTime(0))
{
    //save string to get it's format
}
票数 1
EN

Stack Overflow用户

发布于 2017-01-04 15:02:40

如果您100%确信格式将始终相同,则可以使用ParseExact方法如下:

代码语言:javascript
复制
var parsedDate = DateTime.ParseExact(row, "dd/MM/yyyy hh:mm", CultureInfo.InvariantCulture);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41466876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档