C# 按字符串到npgsqlTime的EF核心3问题

C# 按字符串到npgsqlTime的EF核心3问题,c#,postgresql,npgsql,C#,Postgresql,Npgsql,嘿,伙计们,我正在使用Npgsql,需要将参数传递给我的PostgreSQL存储过程 前两个参数的存储过程预期日期: SELECT wpv.avail_pro_failedbattry_error_powerconv( <date>, <date>, <character varying>, <character varying>, <character varying> dtfrom和dtto是字符串日期格式,它是: dtFrom=

嘿,伙计们,我正在使用Npgsql,需要将参数传递给我的PostgreSQL存储过程 前两个参数的存储过程预期日期:

SELECT wpv.avail_pro_failedbattry_error_powerconv(
<date>,
<date>,
<character varying>,
<character varying>,
<character varying>
dtfrom和dtto是字符串日期格式,它是:

dtFrom="2020/07/03"
dtTo="2020/07/07"
但这给了我一个错误

NpgsqlDateTime DateFrom = NpgsqlDateTime.Parse(dtFrom);
格式不正确!有什么帮助吗?

查看源代码:

哪个叫 还有
Timespan.Parse()
,这似乎是强制性的

因为您没有使用时间,所以可以使用
NpgsqlDate.Parse()

源似乎希望使用以下格式进行日期解析:yyyy-MM-dd

如果你是说7月3日

dtFrom="2020-07-03"
但是如果你是指三月七日

dtFrom="2020-03-07"
源代码:

try {
    var idx = str.IndexOf('-');
    if (idx == -1) {
        throw new FormatException();
    }
    var year = int.Parse(str.Substring(0, idx));
    var idxLast = idx + 1;
    if ((idx = str.IndexOf('-', idxLast)) == -1) {
        throw new FormatException();
    }
    var month = int.Parse(str.Substring(idxLast, idx - idxLast));
    idxLast = idx + 1;
    if ((idx = str.IndexOf(' ', idxLast)) == -1) {
        idx = str.Length;
    }
    var day = int.Parse(str.Substring(idxLast, idx - idxLast));
    if (str.Contains("BC")) {
        year = -year;
    }
    return new NpgsqlDate(year, month, day);
} catch (OverflowException) {
    throw;
} catch (Exception) {
    throw new FormatException();
}
此外,如果不接受
NpgsqlDate.Parse
,则可以使用NpgsqlDateTime.Parse,并将时间部分设置为零

NpgsqlDateTime.Parse("2020-07-03 00:00")
看看资料来源:

哪个叫 还有
Timespan.Parse()
,这似乎是强制性的

因为您没有使用时间,所以可以使用
NpgsqlDate.Parse()

源似乎希望使用以下格式进行日期解析:yyyy-MM-dd

如果你是说7月3日

dtFrom="2020-07-03"
但是如果你是指三月七日

dtFrom="2020-03-07"
源代码:

try {
    var idx = str.IndexOf('-');
    if (idx == -1) {
        throw new FormatException();
    }
    var year = int.Parse(str.Substring(0, idx));
    var idxLast = idx + 1;
    if ((idx = str.IndexOf('-', idxLast)) == -1) {
        throw new FormatException();
    }
    var month = int.Parse(str.Substring(idxLast, idx - idxLast));
    idxLast = idx + 1;
    if ((idx = str.IndexOf(' ', idxLast)) == -1) {
        idx = str.Length;
    }
    var day = int.Parse(str.Substring(idxLast, idx - idxLast));
    if (str.Contains("BC")) {
        year = -year;
    }
    return new NpgsqlDate(year, month, day);
} catch (OverflowException) {
    throw;
} catch (Exception) {
    throw new FormatException();
}
此外,如果不接受
NpgsqlDate.Parse
,则可以使用NpgsqlDateTime.Parse,并将时间部分设置为零

NpgsqlDateTime.Parse("2020-07-03 00:00")

错误是什么?@viveknuna无法分析字符串,错误是System.FormatException:“其中一个标识的项的格式无效。”@viveknuna然后我得到Npgsql.postgresception:'42883:函数wpv.avail\u pro\u failedbattry\u error\u powerconv(没有时区的时间戳,没有时区的时间戳,文本,文本,文本)不存在',因为格式不同检查查询,错误是什么?@viveknuna无法解析字符串,错误为System.FormatException:'其中一个标识的项的格式无效。'try
DateTime DateFrom=DateTime.Parse(dtFrom)
@viveknuna然后我得到Npgsql.postgresception:'42883:函数wpv.avail\u pro\u failedbattry\u error\u powerconv(不带时区的时间戳、不带时区的时间戳、文本、文本、文本)不存在',因为格式不同请检查查询,如果我使用“2020-07-03”则错误formart我仍然得到相同的错误,其中一个已识别的项目是在一个无效的forma中,它非常strange@ilmagnifico我再次查看了源代码,它希望在使用datetime解析器时有一段时间。改为使用日期类型。它将转换日期类型!您的稀释是有效的,但最愚蠢的事情是,当我想将其作为参数传递给存储过程时,它说找不到CLR类型的关系类型的映射NpgsqlDate@ilmagnifico我为
NpgsqlDateTime
添加了一个示例。如果我使用“2020-07-03”formart我仍然得到相同的错误,其中一个已识别的项目是在一个无效的forma中,它非常strange@ilmagnifico我再次查看了源代码,它希望在使用datetime解析器时有一段时间。改为使用日期类型。它将转换日期类型!您的稀释是有效的,但最愚蠢的事情是,当我想将其作为参数传递给存储过程时,它说找不到CLR类型的关系类型的映射NpgsqlDate@ilmagnifico我为
NpgsqlDateTime
添加了一个示例。