我正在使用这段代码将“东部时区”转换为“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) 我在项目的大部分代码中都使用了 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# 还是新手,所以也许我错过了一些相对简单的东西。任何人都可以帮助获得我需要的格式吗?
nodatime 1.3 released,但我想使用nodatime在c#波斯日期时间。如何使用 Noda Time 显示波斯日期时间?
var london = DateTimeZoneProviders.Tzdb["Europe/London"];"
Run Code Online (Sandbox Code Playgroud)
我必须为波斯做什么?
我正在编写一个测试应用程序来重现一些数据写入方案 - 每小时运行一次的任务.
为此,我需要知道它将执行多少次 - 在某一天有多少小时.我尝试这样做:Period.Between(localDateTimeStart.Date, localDateTimeStart.Date.PlusDays(1), PeriodUnits.Hours)
但它给了我ArgumentException说Units contains time units: Hours.在NodaTime中这样做的惯用方法是什么?或者我的方法是错的?
关于如何包括和加载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吗?
谢谢
我正在为.NET Core开发,所以我使用Noda Time的不稳定的最新alpha(2.0.0-alpha20160729).正在使用JSON处理数据.
我将接受用户输入的出生日期字段,我想支持多种输入格式,以防用户无法按照指示感到困惑.例如,我要同时接受MM-dd-yyyy和M/d/yy,等等.
的串行化文档特别声明如下:
可以使用NodaPatternConverter从模式轻松创建自定义转换器.
我不能为我的生活弄清楚如何做到这一点.根据我的理解,我需要自己实现NodaPatternConverter<LocalDate>,IPattern<LocalDate>解析和Action<T>验证.
我开始写作IPattern.Parse<LocalDate>,但该函数返回ParseResult<LocalDate>显然无法访问.它无法以我找到的任何方式进行实例化或使用.我被卡住了.
如何为Noda Time正确创建自定义JSON转换器?
我试图根据具体规则计算周数.我正在寻找的规则的例子是:
第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) 我们的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偏移并将其添加到他们的时间来转换每个用户的指定时间,以确定是否应该向他们发送电子邮件.
有没有更简单的方法来做我想做的事情?
我总是在概念上遇到麻烦,将日期值表示为没有时间的对象(例如,SQL具有DATE旁边的类型DATETIME)。同样的想法经常会产生用总是存储日期和时间(例如C#DateTime)的语言的问题。突然出现时区错误,开发人员坚持认为所有时区hullabaloo都可以忽略,因为它们DateTime实际上只是“一个日期”。但这到底意味着什么?
在我看来,这样的“纯正日期”只能用两种方式解释:
我认为所有“普通日期”用例都属于这两种类别,并且仅当软件仅在配置了完全相同时区的系统上运行并与之通信时,才可以忽略时间/时区。
有人可以提供反例或第三种解释吗?