标签: nodatime

时区转换显示 EDT 而不是 EST

我正在使用这段代码将“东部时区”转换为“EST”。现在它显示“EDT”。您不会经常在某些地方看到该缩写,并且想坚持使用“EST”。如何使用 NodaTime 执行此操作?

 public static string GetTimeZoneAbbr(string timeZone)
        {

            var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZone);

            if (timeZoneInfo != null)
            {
                var dateTime = DateTime.UtcNow;
                var instant = Instant.FromDateTimeUtc(dateTime);
                var tzdbSource = TzdbDateTimeZoneSource.Default;
                var tzid = tzdbSource.MapTimeZoneId(timeZoneInfo);
                var dateTimeZone = DateTimeZoneProviders.Tzdb[tzid];
                var zoneInterval = dateTimeZone.GetZoneInterval(instant);
                return zoneInterval.Name;
            }

            return string.Empty;
        }
Run Code Online (Sandbox Code Playgroud)

.net c# time timezone nodatime

1
推荐指数
1
解决办法
3279
查看次数

c# NodaTime 将日期格式更改为 yyyy-MM-dd HH:mm:ss

我在项目的大部分代码中都使用了 NodaTime。我将 LocalDateTime 作为值获取,需要更改格式以将其作为日期时间字段插入 MySQL 数据库。

我看过 OffSetPattern 的一些东西,但不知道如何使用它。

这是我尝试将其写入数据库的地方。

public void SetDataLog(Controller controllerInfo, LocalDateTime time, string count)
{
    var count2 = Convert.ToInt32(count);

    var sql = "INSERT INTO controller_activation_log (controller_id, activations, date_created, date_created_timezone) VALUES(" + controllerInfo.controllerId + ", " + count2 + ", \'" + time + "\', \'UTC\')";
            mysqldb.Write(sql);
}
Run Code Online (Sandbox Code Playgroud)

LocalDateTime 格式为 04/10/2014 10:45:02 (示例)我需要它是 2014-04-10 10:45:02 作为字符串。

我试图串起来,但显然在这种情况下不起作用。我已经看到了一些关于创建模式并解析它的内容,但我不明白该怎么做,因为我在 NodaTime 的任何地方都没有看到??通常对 NodaTime 和 c# 还是新手,所以也许我错过了一些相对简单的东西。任何人都可以帮助获得我需要的格式吗?

c# mysql nodatime

1
推荐指数
1
解决办法
1432
查看次数

如何在 c# 中使用 nodatime 表示波斯语?

nodatime 1.3 released,但我想使用nodatimec#波斯日期时间。如何使用 Noda Time 显示波斯日期时间?

var london = DateTimeZoneProviders.Tzdb["Europe/London"];"
Run Code Online (Sandbox Code Playgroud)

我必须为波斯做什么?

persian nodatime

1
推荐指数
1
解决办法
267
查看次数

如何在NodaTime中找到一天中的小时数?

我正在编写一个测试应用程序来重现一些数据写入方案 - 每小时运行一次的任务.
为此,我需要知道它将执行多少次 - 在某一天有多少小时.我尝试这样做:
Period.Between(localDateTimeStart.Date, localDateTimeStart.Date.PlusDays(1), PeriodUnits.Hours)
但它给了我ArgumentException说Units contains time units: Hours.在NodaTime中这样做的惯用方法是什么?或者我的方法是错的?

.net nodatime

1
推荐指数
1
解决办法
232
查看次数

NodaTime更新手册tz db

关于如何包括和加载NodaZoneData文件中的tz数据,有一个“使用NodaZoneData文件”部分。

代码部分显示以下内容

    IDateTimeZoneProvider provider;
    // Or use Assembly.GetManifestResourceStream for an embedded file
    using (var stream = File.OpenRead("tzdb-2013h.nzd"))
    {
        var source = TzdbDateTimeZoneSource.FromStream(stream);
        provider = new DateTimeZoneCache(source);
    }
    Console.WriteLine(provider.SourceVersionId);
Run Code Online (Sandbox Code Playgroud)

如何将创建的提供程序设置为NodaTime库,以将其用作默认值?NodaTime版本不遵循tz数据版本。将来会改变吗?还有另一种方法来获取更新的NodaTime库,并将tzdb数据更新为nuget吗?

谢谢

nodatime

1
推荐指数
1
解决办法
111
查看次数

Noda Time的自定义JSON转换器

我正在为.NET Core开发,所以我使用Noda Time的不稳定的最新alpha(2.0.0-alpha20160729).正在使用JSON处理数据.

我将接受用户输入的出生日期字段,我想支持多种输入格式,以防用户无法按照指示感到困惑.例如,我要同时接受MM-dd-yyyyM/d/yy,等等.

串行化文档特别声明如下:

可以使用NodaPatternConverter从模式轻松创建自定义转换器.

我不能为我的生活弄清楚如何做到这一点.根据我的理解,我需要自己实现NodaPatternConverter<LocalDate>,IPattern<LocalDate>解析和Action<T>验证.

我开始写作IPattern.Parse<LocalDate>,但该函数返回ParseResult<LocalDate>显然无法访问.它无法以我找到的任何方式进行实例化或使用.我被卡住了.

如何为Noda Time正确创建自定义JSON转换器?

c# json nodatime .net-core

1
推荐指数
1
解决办法
315
查看次数

确定是否在DST中 - IsInDaylightSavings()

有没有办法确定ZonedDateTime(过去)是否在夏令时?

nodatime

1
推荐指数
1
解决办法
112
查看次数

计算从4月开始的年份的周数

我试图根据具体规则计算周数.我正在寻找的规则的例子是:

第1周= 4月1日集装箱的第一周.

示例数据:

2017年3月27日第1周2017年4月2日

...

2017年9月4日星期四2017年9月10日

我发现了一个类似的问题 - 从四月开始获得一周的周数 - 并以此为指导我已经提出了以下具体日期的工作.但是,在截止之前的日期时间,但在当前一周,会导致问题.

LocalDate firstOne = LocalDate.FromDateTime(dateTime);

int targetYear = firstOne.Month > 4 || firstOne.Month == 4 && firstOne.Day >= 1 ? firstOne.Year : firstOne.Year - 1;

LocalDate start = new LocalDate(targetYear, 4, 1);

int days = Period.Between(start, firstOne, PeriodUnits.Days).Days;
int targetWeek = (days / 7) + 1;

if (targetWeek >= 52)
{
    // if we are greater than 52 then we are technically in week 1 of the following year; …
Run Code Online (Sandbox Code Playgroud)

c# datetime nodatime

1
推荐指数
1
解决办法
400
查看次数

将当地时间转换为UTC时间

我们的ASP.NET MVC Web应用程序具有向用户发送定期通知电子邮件的功能.我们将添加一项功能,用户可以选择特定时间来接收他们的电子邮件(即"我希望每天下午5点收到一封电子邮件").

我计划使用SQL time类型存储选定的时间.我们将有一个每分钟运行一次的后台进程,并寻找需要通过电子邮件发送的用户.该过程使用LINQ-to-Entities查询来查找所有匹配的用户.我打算写一个查询,基本上找到每日电子邮件时间小于当前UTC时间的所有用户 - 这是我遇到问题的地方.每个用户都可以属于不同的时区 - 我们将他们的时区存储为数据库中的IANA时区标识符.我们在项目中使用NodaTime将存储在我们数据库中的任何日期转换为UTC到用户的时区.为了继续我尝试这样做的方式,我需要一些我可以放在LINQ-to-entities查询中的东西,所以我不能真正使用任何NodaTime函数来转换时间并弄清楚当前时间是日期是在用户指定的时间之后,在他们的时区.我不能只在UTC时间存储他们指定的时间,如果我这样做,那么每当DST到来时它都会被关闭一小时.

我现在能想出的最佳解决方案是"缓存"我们数据库中每个时区的当前UTC偏移量.所以我可以使用一些代码来使用NodaTime来获取每个时区的当前偏移量,并将其保存到存储TimeZoneID和UTCHourOffset的数据库中的表中.我可以有一个常规的过程来运行此代码,并确保缓存的小时偏移保持最新.然后在我的查询中,我可以通过查找缓存的UTC偏移并将其添加到他们的时间来转换每个用户的指定时间,以确定是否应该向他们发送电子邮件.

有没有更简单的方法来做我想做的事情?

asp.net timezone datetime entity-framework nodatime

1
推荐指数
1
解决办法
515
查看次数

鉴于国际化,“只是没有时间的约会”真的是一个有效的概念吗?

我总是在概念上遇到麻烦,将日期值表示为没有时间的对象(例如,SQL具有DATE旁边的类型DATETIME)。同样的想法经常会产生用总是存储日期和时间(例如C#DateTime)的语言的问题。突然出现时区错误,开发人员坚持认为所有时区hullabaloo都可以忽略,因为它们DateTime实际上只是“一个日期”。但这到底意味着什么?

在我看来,这样的“纯正日期”只能用两种方式解释:

  1. 从时间点(即“即时”)的角度,可以推断出“ 2019-09-17”表示一天的开始(结束),即“ 2019-09-17 00:00:00”(“ 2019-09-17 23:59:59“)。因此,时区信息是相关的,我们不是在谈论“只是一个日期”。
  2. 另一个选择是日期应该是一整天,因此我们实际上是在谈论从“ 2019-09-17 00:00:00”到“ 2019-09-17 23:59:59” 的时间跨度时区信息也不能忽略。

我认为所有“普通日期”用例都属于这两种类别,并且仅当软件仅在配置了完全相同时区的系统上运行并与之通信时,才可以忽略时间/时区。

有人可以提供反例或第三种解释吗?

timezone datetime internationalization jodatime nodatime

1
推荐指数
1
解决办法
63
查看次数