gpt4 book ai didi

c# - 字符串在 shamsi date fa-ir 中未被识别为有效的日期时间

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:47 25 4
gpt4 key购买 nike

我在我的程序中使用了 shamsi 日期并将其保存在 sqllite 日期表中。在保存转换我的日期之前,我使用 LINQ 进行保存。

db.savechek(Convert.ToDateTime(datenow.Value.ToString("yyyy-MM-dd")),
txt_sh_ch.Text.ToString(),
Convert.ToDouble(txt_price.Text.ToString()),
Convert.ToDateTime(chekdate.Value.ToString("yyyy-MM-dd")),
txt_bank_name.Text.ToString(),
Convert.ToDouble(txt_price.Text.ToString()),
Guid.Parse(txtid.Text),
Guid.Parse(txtid.Text),
txttozihat.Text.ToString());

这段代码工作正常,但我只有 3 本书 1393-02-29 和 1393-02-30 和 1393-02-31 有这个错误。

我尝试使用 ParseExact 但在我的第 3 次约会中不起作用。

最佳答案

目前我怀疑您正在将日期解析为 Gregorian 日期 - 如果您尝试输入月份为 2 但日期为 30 或 31(或一天)的日期,这将失败28 在非闰年)。

DateTime 本身采用公历,但 .NET 确实支持非公历。要解析非公历中的值,您可能需要使用 CultureInfo,它使用该日历作为默认值。 (或者将 DateTimeFormatInfo 专门传入 TryParseExact 方法 - 这也是一个 IFormatProvider。)

或者,如果您所说的“shamsi”日历就是我所知道的波斯日历,您可以使用我的 Noda Time 的最新版本——尚未完全发布——图书馆。你会做类似的事情:

using System;
using NodaTime;
using NodaTime.Text;

class Test
{
static void Main()
{
var persianCalendar = CalendarSystem.GetPersianCalendar();
var pattern = LocalDatePattern.CreateWithInvariantCulture("yyyy-MM-dd")
.WithTemplateValue(new LocalDate(1393, 1, 1, persianCalendar));
LocalDate result = pattern.Parse("1393-02-29").Value;
DateTime dateTime = result.AtMidnight().ToDateTimeUnspecified();
Console.WriteLine(dateTime); // 19th May 2014 (Gregorian)
}
}

然后您可以将 DateTime 保存到数据库中,稍后将其转换回:

var persianDate = LocalDateTime.FromDateTime(dateTime)
.WithCalendar(persianCalendar)
.Date;

很遗憾,我们只在 Noda Time 1.3 中引入了波斯历,但我们希望尽快发布...

关于c# - 字符串在 shamsi date fa-ir 中未被识别为有效的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22891372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com