字符串到日期时间?扩展转换.或者更好的东西

本文关键字:更好 或者 转换 扩展 日期 时间 字符串 | 更新日期: 2023-09-27 18:19:19

希望我没有重新创建已经被询问了1000次的东西,但是由于'?'-s,搜索它很困难。

我想在日期时间转换字符串?在c#。还有什么比这更简洁的方法呢?

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

提前感谢,

哈里

字符串到日期时间?扩展转换.或者更好的东西

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();

你至少可以使用条件语句:

private static DateTime? ToDate(string text)
{
    return text == null ? (DateTime?) null : Convert.ToDateTime(text);
}

我个人可能会使用DateTime.ParseExact预期的格式,而不是Convert.ToDateTime,但这是另一回事。

你还没有真正解释这里更大的画面是什么——文本是从哪里来的?它期望的格式吗?你需要对文化敏感吗?如果无法解析文本,您希望发生什么?

我会使用扩展方法(如果你是在。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();            
    }
}
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();
    }  
  }
相关文章: