问题标签 [nodatime]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
326 浏览

c# - Json.NET 转换器的 ServiceStack.Text 等效项是什么,例如应用于 NodaTime 类型时?

如何NodaTime.LocalDateTime使用 ServiceStack.Text 控制自定义类型(例如 )的序列化/反序列化?

Json.NET 提供Converters 了这一点,这样每次类包含自定义类型时,都会使用相应的自定义序列化器/反序列化器。例如,可以使用自定义方法将 NodaTime.LocalDateTime 类型的属性转换为字符串或从字符串转换。

在 db4o 中,IObjectConstructor将充当类似的转换层,在类型被持久化之前将其转换为另一种类型(LocalDateTime 可以转换为 DateTime)。

0 投票
1 回答
467 浏览

nodatime - NodaTime 是否支持相对时间显示?

我有一种情况,相对时间对用户来说比绝对时间更重要。因此,能够快速说出“事件发生在 5 天零 5 小时前”比“事件发生在 CDT 下午 1 点,现在是 5 天后 CST 下午 5 点”更重要。

我们以 UTC 格式存储日期并转换为用户显示:

我们将在 NodaTime 1.2 完全退出并且之前使用香草 ToString 时使用它。

但是,使用此模式的时间最终会使用时间的日光状态,而不是当前的日光状态。这意味着时间看起来像:16:15:32 10/25/13 CDT即使我们现在已经过渡到 CST。

它是时间的绝对量度。这迫使用户执行以下逻辑:“那是多久以前?现在是夏令时吗?如果是,则差异为 x。如果不是,我必须增加或减少一个小时?这会产生差异 y。”

15:15:32 10/25/13 CST同时,在没有 DST 的情况下,将显示时间的相对度量。这迫使用户不进行任何转换,并允许他们更容易地计算该时间在上下文中的含义。

在具有多个日期的显示中,对整个集合执行绝对时间逻辑可能会变得很棘手。做一次很难做到正确。然而,像“posted 5 hours ago”这样友好的相对字符串也迫使他们自己解决日期和时间——这些信息仍然很重要。

折衷方案可能是在前 24 小时前发布空白小时/分钟,或者同时包含友好字符串和绝对时间——这些都是我见过的模式。

但是忽略这些,NodaTime 中是否有一种方法可以使时间具有特定的日光状态,以便在相对上下文中显示时间?

0 投票
1 回答
938 浏览

.net - 当 .NET 应用程序与 XenApp 一起使用时,是否有一种可靠的方法来处理时区?

我遇到了一个与 .NET 时区 ID 结合 XenApp 相关的问题,可以简化为以下代码段,抛出 a TimeZoneNotFoundException(即调用TimeZoneInfo.FindSystemTimeZoneById):

确切的异常文本是:

(类似的事情发生在 NodaTime 1.1 中,例如在对 的调用中NodaTime.DateTimeZoneProviders.Bcl.GetSystemDefault())。

奇怪的是,它TimeZoneInfo.Local.Id似乎返回了时区的德语名称,尽管服务器运行时语言设置为英语,并且时区 ID 应该是语言中性的(请参阅.Net TimeZoneInfo ID - Is it Windows Language Specific?)。但是客户端的语言是德语......(更新/澄清:如果客户端和服务器使用相同的语言,则不会出现问题。)

我认为这里发生的是:

  1. .NET 调用GetTimeZoneInformationkernel32.dll 以检索本地时区。
  2. API 调用被 XenApp 拦截(请参阅是否可以为 Citrix XenApp 托管的应用程序获取用户时区?),因为 XenApp 可以配置为使用客户端的本地时区(请参阅http://mdaslam.wordpress.com/2010 /01/05/xenapp-time-zone-setting/)。
  3. 生成的TIME_ZONE_INFORMATION结构包含一个德语标准名称(我在英语 XenApp 服务器上使用 p/invoke 进行了检查)。
  4. 由于TIME_ZONE_INFORMATION结构(参见http://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v=vs.85).aspx)不包含语言中性时区标识符 .NET 无法匹配将德国时区标识符返回到其本地时区“数据库”(带有英文名称),并使用(本地化)标准名称作为时区的后备标识符。因此,TimeZoneInfo.Local.Id包含“本地”时区的德语名称。
  5. 然后TimeZoneInfo.FindSystemTimeZoneById这个备用标识符失败,因为系统确实不知道它(因为它是来自具有不同语言的系统的本地化标准名称)。

那么除了告诉客户在 XenApp 中禁用客户端时区的使用之外,我还能如何解决这个问题呢?

0 投票
2 回答
899 浏览

c# - 使用 Nodatime 从期间排除日期

我正在尝试计算两个LocalDateTime值之间的时间量并排除特定日期(在此示例中,它是银行假期)。

如您所料,该differenceBetween值显示两个日期之间的天数/小时/分钟/秒数。

我可以从开始日期开始检查每一天,看看bankHolidays集合是否包含该日期,例如

我觉得我遗漏了一些明显的东西,应该有一个更简单的方法,有没有更简单的方法可以找到两个日期之间的时间段,同时排除某些日期?

我还需要在此排除项中包括周末,显而易见的方法似乎是在检查银行假期的同时检查周末的星期几,但这似乎不是最好/正确的处理方式。

0 投票
1 回答
309 浏览

c# - 在 NodaTime 中处理不从午夜开始的日子

我正在开发一个带有火车时刻表的应用程序,其中首班火车在 0400 出发,而最后一班火车在 0200 出发。因此,该应用程序的用户处理从 0300 开始到 0300 结束的日子。换句话说,当他们说“周三 0200 的火车”他们真正的意思是“周四 0200 出发的火车”。

我们的应用程序需要存储(例如)星期三出发的所有火车,这意味着它不应该包括在 0300 之前出发的火车,但它应该包括从第二天出发直到 0300 的火车。

我将如何在应用程序中表示这一点而不会发疯?以及如何将其存储在数据库中以便于查询?

0 投票
2 回答
6571 浏览

.net - 当主题是 DateTime 时,ShouldBeEquivalentTo 对等对象失败

我正在尝试做的事情

我刚刚设置了一个测试,以确保将 NodaTimeLocalDateTime映射到 .NET DateTime,并保留相同的日期和时间值。我正在使用 FluentAssertions 的ShouldBeEquivalentTo方法来比较相应的属性值。

问题

测试失败:

我不知道最后两行是什么意思。

我试过的

  1. 在调试器中运行测试以确认每个值都相同。
  2. Include通过删除不同属性的 s 来查看问题是否是特定属性。
  3. 基于配置EquivalencyAssertionOptions<DateTime>.Empty()确保不隐式涉及额外的检查或属性。
  4. 将其简化为以下内容。

    /li>
0 投票
1 回答
2427 浏览

c# - How do I accurately represent a Date Range in NodaTime?

Goals

I have a list of LocalDate items that represent sets of start dates and end dates.

I would like to be able to store date ranges, so that I can perform operations on them as a set of overlapping or distinct ranges, etc.

Questions

  • Does NodaTime provide some sort of DateRange construct that I've missed in the docs?
  • Am I thinking about this wrong? Is there a more natural / preferred way to accomplish this that NodaTime already allows for?
  • Am I setting myself up for trouble by attempting to think about a date range using a LocalDate for a start and an end date?

I'm completely new to NodaTime and assuming that this is a conceptual misunderstanding on my part.

Update: I noticed a similar question on the subject from 2009, but that seems to refer to another utilies class; I'm assuming that since then NodaTime may have evolved to accomodate this situation.

0 投票
1 回答
2189 浏览

time - OLSON/IANA 时区的更好名称

我们想在我们的网站上将 Windows 时区转换为 OLSON 时区。然而,OLSON 时区的问题在于它们使用大陆而不是国家名称来命名,例如:

我认为我们的任何客户都不会期望他/她必须输入大陆名称才能找到正确的时区 - 时区列表比 Windows 中使用的要大得多 - 几乎有数千个。即使客户发现他必须输入大陆名称,例如Asia,他也必须在数百个时区中搜索所有亚洲国家。从可用性的角度来看,这是非常糟糕的。

是否有任何数据库可以将 OLSON/IANA 时区名称映射到国家风格名称,例如:

0 投票
5 回答
45920 浏览

c# - DateTime.Now 和文化/时区特定

我们的应用程序旨在处理来自不同地理位置的用户。

我们无法检测到当前最终用户的本地时间和时区对它进行的操作是什么。他们选择不同的文化,例如 sv-se、en-us、ta-In,即使他们从欧洲/伦敦时区访问也是如此。

我们将它托管在美国的托管服务器中,应用程序用户来自Norway/Denmark/Sweden/UK/USA/India

问题是我们用来DateTime.Now存储记录创建/更新日期等。

由于服务器在美国运行,所有用户数据都保存为美国时间:(

在 SO 进行研究之后,我们决定将所有历史日期存储在 DB 中DateTime.UtcNow

问题:

在此处输入图像描述

在 上创建了一条记录29 Dec 2013, 3:15 P.M Swedish time

我们希望向在印度/瑞典/美国登录的用户显示相同的历史时间。

截至目前,我们正在使用当前文化用户登录并从配置文件中选择时区,并使用 TimeZoneInfo 类进行转换

查看代码

注意:用户可以在登录前更改文化/语言。它是一个基于本地化的应用程序,在美国服务器上运行。

我见过NODATIME,但我不明白它如何帮助托管在不同位置的多文化 Web 应用程序。

问题

如何29 Dec 2013, 3:15 P.M为登录 INDIA/USA/Anywhere 的用户显示相同的记录创建日期?

到目前为止,我的逻辑ConvertUTCBasedOnCulture是基于用户登录的文化。这应该与文化无关,因为用户可以使用来自印度/美国的任何文化登录

数据库栏

创建时间:SMALLDATETIME

更新:尝试的解决方案:

DATABASE COLUMN TYPE: DATETIMEOFFSET

用户界面

最后,我在每个请求中使用下面的 Momento.js 代码发送当前用户的本地时间

应用

然后叫进来

在视图中

在视图中,它向用户显示本地时间,但我想看到dd-MMM-yyyy CET/PST(2 小时前)。

这 2 小时前应该从最终用户的本地时间计算。与使用时区显示和本地用户计算创建/编辑时间的堆栈溢出问题完全相同。

示例: answered Jan 25 '13 at 17:49 CST (6 hours/days/month ago)因此来自美国/印度用户的其他查看可以真正理解此记录是在印度/美国当前时间正好 6 小时创建的

几乎我想我什么都做到了,除了显示格式和计算。我怎样才能做到这一点?

0 投票
1 回答
3536 浏览

c# - 使用 NodaTime,如何将 Instant 转换为对应系统的 ZonedDateTime?

我在数据库中有一个事件日志,事件的日期时间存储为 UTC 时间。在我使用 NodaTime 的应用程序中,我将值作为 a 获取DateTime,然后将其转换为Instant

现在我想获得ZonedDateTimeinstant使用系统时区相对应的信息。我知道我可以用它instant.InZone(systemTimeZone)来获得ZonedDateTime我需要的东西。但是,我不知道如何systemTimeZone用正确的值填充变量。如何获取DateTimeZone系统时区对应的对象?