字符串到DateTime?扩展转换。*或更好的东西

时间:2012-01-04 10:57:36

标签: c# asp.net datetime

希望我没有重新创造已经被问过1000次的东西,但是由于'?' - s而很难找到它。

我想在Datetime中转换字符串?在c#中。 比这更简洁的方法是什么:

    private static DateTime? toDate(string probDate)
    {
        if (probDate == null) { return null; }
        else { return Convert.ToDateTime(probDate); }
    }

提前致谢,

哈利

4 个答案:

答案 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();
    }  
  }