使用DateTimeOffset(在C#和SQL Server上协调的通用时间(UTC)

发布于 2025-02-05 04:44:42 字数 2500 浏览 2 评论 0原文

我正在尝试将UTC与.NET和SQL Server 2019一起使用。

我想获得两个日期之间过期的文件,在.NET上,我正在使用此代码获得UTC:new DateTimeOffset(new DateTime(utcnow.year) ,utcnow.month,utcnow.day,0,0,0));

  • 启动“ 12/06/2022 00:00:00:00 +01:00”
  • EndDate“ EndDate” 12/06/2022 00:00:00 +01:00“

在SQL Server上,我将字段到期日设置为dateTimeOffset(7)

示例:2020-07-30 23:00:00.0000000 +00:00。

当我尝试执行查询时,我会得到此错误:

microsoft.data.sqlclient.sqlexception(0x80131904):转换日期和/或从字符字符串转换时间时失败。

生成的查询包含以下行:expirationDate> = '23/06/2022 00:00:00:00 +01:00''和ExpirationDate< '29/06/2022 00:00:00 +01:00我得到此错误:

转换日期和/或从字符串转换时间时失败。

如果我将行更改为:expirationDate> = '06/23/23/2022 00:00:00 +01:00''和ExpirationDate< '12/29/2022 00:00:00 +01:00,它有效,我得到结果。

总之,如果我将“月”的字段切换为“天”,将“天”转换为“月”。我应该在.NET上做什么将日期正确发送到SQL?

下面,我在.net上显示我使用的代码:

​img src =“ https://i.sstatic.net/5yqjk.png” alt =“ enter image Description there there”>

Select Distinct

    [DefaultLanguage],
    [Email],
    [SupplierCompanyId]
FROM
(
    SELECT
        ROW_NUMBER() OVER (PARTITION BY SupplierQualification.Id, [File].FileTypeId ORDER BY [File].ExpirationDate DESC) RowNumber,
        [File].ExpirationDate,
        Companies.DefaultLanguage,
        Companies.Email,
        SupplierQualification.CompanyId [SupplierCompanyId]
    FROM
        Reply
    INNER JOIN
        FormReply
    ON  FormReply.Id = Reply.FormReplyId
    INNER JOIN
        SupplierQualification
    ON  SupplierQualification.Id = FormReply.SupplierQualificationId
    INNER JOIN
        AttachmentQuestion
    ON  AttachmentQuestion.QuestionId = Reply.QuestionId
    INNER JOIN
        [File]
    ON  [File].FileTypeId = AttachmentQuestion.FileTypeId AND
        [File].CompanyId = SupplierQualification.CompanyId
    INNER JOIN
        FileType
    ON  FileType.Id = [File].FileTypeId
    INNER JOIN
        Companies
    ON  Companies.CompanyID = SupplierQualification.CompanyId
)   AttachedFile
WHERE
    AttachedFile.RowNumber = 1 AND
ExpirationDate >= '12/06/2022 00:00:00 +01:00' AND ExpirationDate < '13/06/2022 00:00:00 +01:00'ORDER BY 1
OFFSET 0 ROWS
FETCH NEXT 100 ROWS ONLY

database

expirationDate -dateTimeOffsect -dateTimeOffset(7)

I'm trying to use UTC with .NET and SQL Server 2019.

I want to obtain the files expired between two dates, on .net i am using this code to obtain UTC:new DateTimeOffset(new DateTime(utcNow.Year, utcNow.Month, utcNow.Day, 0, 0, 0));

  • begindate "12/06/2022 00:00:00 +01:00"
  • endDate"12/06/2022 00:00:00 +01:00"

On SQL Server I have the field expirationDate set to datetimeoffset(7).

example: 2020-07-30 23:00:00.0000000 +00:00.

When I try to execute the query, I get this error:

Microsoft.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting date and/or time from character string.

The query generated contains this line: ExpirationDate >= '23/06/2022 00:00:00 +01:00' AND ExpirationDate < '29/06/2022 00:00:00 +01:00 and I get this error:

Conversion failed when converting date and/or time from character string.

If I change the line to this: ExpirationDate >= '06/23/2022 00:00:00 +01:00' AND ExpirationDate < '12/29/2022 00:00:00 +01:00, it works and i get results.

In conclusion, if I switch the field "month" to "day" and the field "day" to "month" it works. What should I do on the .NET to send the date correctly to SQL?

Below, I show the code I used on .NET:

enter image description here

Query SQL:

enter image description here

Select Distinct

    [DefaultLanguage],
    [Email],
    [SupplierCompanyId]
FROM
(
    SELECT
        ROW_NUMBER() OVER (PARTITION BY SupplierQualification.Id, [File].FileTypeId ORDER BY [File].ExpirationDate DESC) RowNumber,
        [File].ExpirationDate,
        Companies.DefaultLanguage,
        Companies.Email,
        SupplierQualification.CompanyId [SupplierCompanyId]
    FROM
        Reply
    INNER JOIN
        FormReply
    ON  FormReply.Id = Reply.FormReplyId
    INNER JOIN
        SupplierQualification
    ON  SupplierQualification.Id = FormReply.SupplierQualificationId
    INNER JOIN
        AttachmentQuestion
    ON  AttachmentQuestion.QuestionId = Reply.QuestionId
    INNER JOIN
        [File]
    ON  [File].FileTypeId = AttachmentQuestion.FileTypeId AND
        [File].CompanyId = SupplierQualification.CompanyId
    INNER JOIN
        FileType
    ON  FileType.Id = [File].FileTypeId
    INNER JOIN
        Companies
    ON  Companies.CompanyID = SupplierQualification.CompanyId
)   AttachedFile
WHERE
    AttachedFile.RowNumber = 1 AND
ExpirationDate >= '12/06/2022 00:00:00 +01:00' AND ExpirationDate < '13/06/2022 00:00:00 +01:00'ORDER BY 1
OFFSET 0 ROWS
FETCH NEXT 100 ROWS ONLY

Database

expirationDate - datetimeoffset(7)

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文