希望我没有重新创造已经被问过1000次的东西,但是由于'?' - s而很难找到它。
我想在Datetime中转换字符串?在c#中。 比这更简洁的方法是什么:
private static DateTime? toDate(string probDate)
{
if (probDate == null) { return null; }
else { return Convert.ToDateTime(probDate); }
}
提前致谢,
哈利
答案 0 :(得分:3)
private static DateTime? toDate(string probDate)
{
if (!string.IsNullOrWhiteSpace(probDate)) {
DateTime converted;
if (DateTime.TryParse(probDate, out converted))
{
return converted;
}
}
return null;
}
这取决于。如果无法转换probDate,您希望发生什么?该方法应该返回null,还是抛出异常?
对评论#1的回复
由于您的方法签名是私有的,我认为这只是特定类的静态帮助方法。如果你想在整个应用程序中重用这个东西,我会创建一个扩展方法:
public static class StringExtensions
{
public static DateTime? ToDate(this string probDate)
{
// same code as above
}
}
然后你可以这样执行:
string probDate = "1/4/2012";
DateTime? toDate = probDate.ToDate();
答案 1 :(得分:2)
你至少可以使用条件:
private static DateTime? ToDate(string text)
{
return text == null ? (DateTime?) null : Convert.ToDateTime(text);
}
就我个人而言,我可能会使用预期格式的DateTime.ParseExact
而不是Convert.ToDateTime
,但这是另一回事。
你还没有真正解释这里的大局是什么 - 文字来自哪里? 是否有预期的格式?你需要对文化敏感吗?如果无法解析文本,您希望发生什么?
答案 2 :(得分:1)
我会使用extension方法(如果您使用的是.Net 3.5+)。它既优雅又可重复使用。
像这样:
public static class Extensions
{
public static DateTime? ToNullableDate(this String dateString)
{
if (String.IsNullOrEmpty((dateString ?? "").Trim()))
return null;
DateTime resultDate;
if(DateTime.TryParse(dateString, out resultDate))
return resultDate;
return null;
}
}
public class Test
{
public Test()
{
string dateString = null;
DateTime? nullableDate = dateString.ToNullableDate();
}
}
答案 3 :(得分:1)
static class Program
{
//Extension method for string
public static DateTime? ToNullableDate(this string text)
{
return string.IsNullOrEmpty(text) ? (DateTime?)null : Convert.ToDateTime(text);
}
static void Main()
{
string s = null;
DateTime? d = s.ToNullableDate();
s = "1/1/2012";
d = s.ToNullableDate();
}
}