F# - 解析日期

6

关于在F#中解析日期的非常基本的问题。我对F#和.NET非常陌生,请多多包涵。

我的日期格式为yyyyMMDD,例如20100503

如何将其解析为F#中的DateTime类型。

我尝试了System.DateTime.Parse("20100503");但是出现了错误。

我如何将一个格式字符串传递给Parse方法?

答案是-感谢大家的回复。

let d = System.DateTime.ParseExact("20100503", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
5个回答

8

3

DateTime.ParseExact("20100503", "yyyyMMdd", CultureInfo.CurrentCulture)

使用ParseExact方法并使用小写的d而不是大写的D。


2
今天早上我回答了一个类似的问题。我没有使用过 F#,但如果你能够使用 DateTime.ParseExact,我的答案可能会对你有所帮助。
你也可以考虑使用 TryParseExact,这样你就可以根据函数返回 false 来捕获失败,而不必将其放在 try catch 中:
//Using code example from my previous answer...
string s = "100714 0700"; 
DateTime d;
if (!DateTime.TryParseExact(s, "yyMMdd hhmm", CultureInfo.InvariantCulture, out d))
{
  // Whoops!  Something is wrong with the date.
}


//In your case
string s = "20100503"; 
DateTime d;
if (!DateTime.TryParseExact(s, "yyyyMMdd", CultureInfo.InvariantCulture, out d))
{
  // Whoops!  Something is wrong with the date.
}

我喜欢你建议使用TryParseExact的想法。不过F#的用法与C#有所不同。它可以同时返回成功和结果,代码如下:match DateTime.TryParseExact(s, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None) with | true,d -> d | false,_ -> DateTime.Now。如果你不介意的话,我会在你的C#版本下添加这个代码块。 - Nathan Shively-Sanders

0

我认为你想在我的答案下发表评论。你可以在创建的DateTimeFormatInfo对象上设置各种属性,我相信你想要设置的是ShortDate,但我必须提醒你,我不知道这是否适用于没有分隔符的情况。这就是为什么我会像两个答案所建议的那样操纵字符串。 - marr75
你需要将字符串放入DateTime.Parse可以使用的格式中。尝试将其更改为YYYY-MM-DD。其他人已经说可以使用DateTime.ParseExact,这将使你可以控制格式。 - Mike Cheel

0

你需要使用DateTime.Parse的重载方法,该方法需要一个IFormatProvider参数。你提供的IFormatProvider必须能够理解该格式。

你可以通过创建一个DateTimeFormatInfo对象并为要解析的日期字符串设置正确的格式来实现这一点。

对于你正在做的事情来说,这可能是很多工作量。如果你可以先稍微重新组织一下字符串(最好是用分隔符分隔的日期字符串),那么你可能会更好地完成任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接