我收到一个字符串,我想将该字符串解析为日期,并希望将其存储在DataTable中。
字符串可以是格式 1-“2014/23/10” 2-“2014-23-10”
{
string st="2014/23/10";
string st="2014-23-10";
}
并附上时间。
有什么想法让它变得可能吗?
答案 0 :(得分:1)
由于两者都不是标准日期和时间格式,您可以使用DateTime.ParseExact
方法;
string st = "2014/23/10";
string st1 = "2014-23-10";
var date = DateTime.ParseExact(st,
"yyyy/dd/MM", CultureInfo.InvariantCulture);
var date1 = DateTime.ParseExact(st1,
"yyyy-dd-MM", CultureInfo.InvariantCulture);
输出将是;
10/23/2014 12:00:00 AM
10/23/2014 12:00:00 AM
这里有 demonstration
。
当然,这些输出取决于您当前的文化主题。
如果您希望将DateTime格式化为字符串表示形式,则可以使用DateTime.ToString(string)
overload作为字符串格式接受。
由于您有多种格式,因此可以使用DateTime.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime)
overload将格式作为字符串数组。
var formats = new []{"yyyy-MM-dd", "yyyy/MM/dd"};
DateTime dt;
if(DateTime.TryParseExact(st, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
//
}
else
{
//
}
答案 1 :(得分:1)
DateTime.ParseExact
或DateTime.TryParseExact
在这里是合适的 - 两者都接受多个格式字符串,这是您在这种情况下所需要的。确保指定不变文化,以便不会影响特定于文化的设置(例如默认日历)影响结果:
string[] formats = { "yyyy-MM-dd", "yyyy/MM/dd" };
DateTime date;
if (DateTime.TryParseExact(input, formats,
CultureInfo.InvariantCulture,
DateTimeStyles.None, out date))
{
// Add date to the DataTable
}
else
{
// Handle parse failure. If this really shouldn't happen,
// use DateTime.ParseExact instead
}
如果输入来自用户(因此"预期"可能会被破坏,而不会在系统中的任何位置显示错误),则应使用TryParseExact
。如果解析失败表明存在一个应该简单地中止当前操作的重大问题,请改用ParseExact
(它会在失败时抛出异常)。
答案 2 :(得分:0)
如果您需要灵活,请转换为DateTime
DateTime.TryParseExact();
甚至DateTime.Parse
。然后你可以根据自己的喜好将其格式化!
请参阅:http://msdn.microsoft.com/en-us/library/ms131044(v=vs.110).aspx
答案 3 :(得分:0)
试试这个:
DateTime.Parse(st);
如果以上行不适合您,请在下面添加cultrureInfo:
DateTime.ParseExact(st,"yyyy/dd/MM", CultureInfo.InvariantCulture);
答案 4 :(得分:0)
尝试
DateTime.Parse(st, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
根据您的要求设置DateTimeStyles。