尝试在属性 (C#) 中将字符串解析为日期时间

本文关键字:字符串 时间 日期 属性 | 更新日期: 2023-09-27 18:35:22

我试图解析一个字符串一个日期时间对象。没有问题:-)当我尝试直接在属性集方法中执行此操作时,我的问题来了。

我以为我可以这样做:

        private DateTime _fromDate;
        public DateTime FromDate
        {
            get { return _fromDate; }
            set { _fromDate = DateTime.Parse(value); }
        }

但是我收到此错误:

"参数 1:无法从'System.DateTime'转换为'字符串'"

有谁知道该怎么做,如果可以做到的话?

尝试在属性 (C#) 中将字符串解析为日期时间

>_fromDate的类型为 DateTime

DateTime.Parsestring并返回DateTime

您正在传入已经是DateTimevalue并且没有将DateTime隐式转换为string

如果要直接将string解析为DateTime,则需要一个新属性,该属性是string类型:

private DateTime _fromDate;
public string FromDate
{
    get { return _fromDate.ToString(); }
    set { _fromDate = DateTime.Parse(value); }
}

尽管您需要 a) 对字符串的格式进行一些控制,并且 b) 对输入字符串进行一些安全检查,以确保它不会在不是有效日期时引发异常。

该属性的类型为 DateTime ; 您根本无法将字符串作为值传递,即使您打算自己将其转换为DateTime

用更专业的术语来说,此属性会导致你的类有一个方法

public DateTime get_FromDate(DateTime value)
{
    // your property setter code here
}

该方法采用DateTime参数,并且无法更改该参数。

如果要为类的用户提供一种将字符串转换为DateTime的便捷方法(可能是使用非平凡处理的方法),则可以将转换作为类上的方法公开。用户每次都必须显式调用它,但这就是生活。

您已经将参数作为DateTime获取,因此无需解析它。

如果你真的坚持要解析它,把它转换成一个字符串

set { _fromDate = DateTime.Parse(value.ToString()); }

但是如果你这样做,你会得到一个日期时间,将其转换为字符串,然后将其转换回日期时间,即......好吧,不是辉煌的:)

不是为了打败一匹 4 年的死马,但我偶然发现了这个线程,其思维过程与 OP 相似,并想总结我个人对这个主题的发现。 最终,如果要设置现有对象的 DateTime 属性,则必须提前分析它(如前面的答案所示)。 但是,我实际上关心的是初始化对象,您可以传递要在构造函数中解析的文本值。

public class SomeClass
{
    public SomeClass(String date)
    {
        DateTime tmpDate;
        DateTime.TryParse(date, out tmpDate);
        if (tmpDate != DateTime.Minvalue)
        {
            FromDate = tmpDate;
        }
        else
        {
            throw new ArgumentError(("Unable to parse the input string " + date));
        }

在我的特定情况下,我希望我的 DateTime 属性可为空,因此我必须创建一个方法(从此处提取)来处理解析(这将用于在外部和构造函数中解析数据。 例如:

public class SomeClass
{
    public SomeClass(String date)
    {
        DateTime? tmpDate = this.TryParse(date);
        if (tmpDate.hasValue)
        {
            FromDate = tmpDate;
        }
        else
        {
            throw new ArgumentError(("Unable to parse the input string " + date));
        }
    }
    public DateTime? FromDate { get; set;}
    public DateTime? TryParse(string text)
    {
        DateTime date;
        if (DateTime.TryParse(text, out date))
        {
            return date;
        }
        else
        {
            return null;
        }
    }

显然,您可能希望创建其他构造函数,并且可能将匹配的类型构造函数作为默认值。

简单使用

private DateTime _fromDate;
public DateTime FromDate
    {
        get { return _fromDate; }
        set { _fromDate = value; }
    }

valueDateTime,因为该物业是DateTime。当有人将此属性分配给一个DateTime object它将进入value。在"设置"中,该值将分配给_fromDate

您会收到编译器错误,因为DateTime.Parse(string s)采用string输入参数,但value的类型为 DateTime ,无法隐式转换为 string

您不需要解析该值,因为它已经DateTime,因此您可以将代码更改为set { _fromDate = value; }