这是一个愚蠢的问题。但我有一个没有零填充的字符串日期和任何分隔符如下:
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
...
'owner_id' => $data['id'],
]);
}
有没有办法使用C#lib或其他任何方式将其转换为日期格式?我不确定最后三位数字,或者是最后一位数字 - 它可以是白天,也可以是最后两位数字。
答案 0 :(得分:7)
一般情况下,您无法:您自己的示例演示了这一点。 "2016111"
是否意味着
2016 Nov 1 // 2016-11-1
或
2016 Jan 11 // 2016-1-11
从技术上讲,你可以把
string date = "2016111";
var result = DateTime.ParseExact(date,
"yyyyMd",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeLocal);
获取
1 Nov 2016
答案 1 :(得分:1)
正如其他人所说,你不能,有时你获得两个有效日期 但也许这种方法对你有用。
public static List<DateTime> ParseAmbiguousDate(string str)
{
var result = new List<DateTime>();
DateTime d;
if (str.Length == 8)
{
if (DateTime.TryParseExact(str, "yyyymmdd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out d))
{
result.Add(d);
return result;
}
}
else if (str.Length == 7)
{
var str1 = str.Insert(4, "0");
if (DateTime.TryParseExact(str1, "yyyyMdd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out d))
{
result.Add(d);
}
var str2 = str.Insert(6, "0");
if (DateTime.TryParseExact(str2, "yyyyMdd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out d))
{
result.Add(d);
}
}
return result;
}