问题标签 [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.
asp.net-web-api - 在 WebAPI 模型中使用 NodaTime Instant 总是验证失败
我的 WebAPI v4 端点的模型之一有一个 type 字段NodaTime.Instant
。模型验证总是报告失败 ( Model.IsValid == false
),并带有错误消息“Unexpected token parsing Instant. Expected String, got Date.” 这显然来自NodaTime。
请求消息实际上确实Instant
作为包含 ISO-8601 日期的字符串传递,因此必须DateTime
在 NodaTime 获取它之前的某个时间点将其解析为 BCL。我尝试使用OffsetDateTime
and LocalDateTime
,但在每种情况下都遇到了类似的错误。
那么我应该在这里做什么?我应该传递除 a 以外的东西Instant
吗?是否有其他方法来处理不会导致此错误的解析或验证?
我在下面包含了一个最小的复制。如果您使用类似的请求正文向其发布,它应该会失败{"SomeInstant":"2013-08-13T17:51:22.1705292Z"}
c# - 如何在 WCF 中将 Noda Time(或任何第三方类型)对象作为参数传递?
我有一个在 OperationContract 参数中使用 Noda Time 类型(LocalDate
和ZonedDateTime
)的服务,但是当我尝试发送时LocalDate(1990,7,31)
,服务器接收到一个具有默认值 (1970/1/1) 的对象。客户端或服务器不会引发错误。
以前它适用于相应的 BCL 类型 ( DateTimeOffset
)。我知道 WCF 可能不“知道” Noda Time 类型,但我不知道应该如何添加它们。我在有关已知类型的文档中检查了此页面,但没有帮助。
有什么方法可以避免从 BCL 类型到 BCL 类型的脏(并且可能不完整)手动转换/序列化?
谢谢你。
c# - 在不同时区之间转换时间
我正在构建一个 Windows 商店时钟应用程序来显示用户的当前时间以及世界各地不同城市的时间。
最初,我计划完全使用谷歌等的时区网络服务来完成这项工作,但在查看了免费帐户中允许的请求数量以及获得付费帐户所涉及的成本之后,我觉得最好找到一个替代方案无需抵押房屋即可解决。
环顾四周,我发现了 John Skeet 和团队的优秀 NodaTime 库。在翻阅文档并在此处查看 stackoverflow 之后,我的脑海中仍然嗡嗡作响所有与日期时间和时区相关的术语和转换方法。无论如何,我认为我可以通过 2 个选项来做到这一点:
选项 1:使用 DateTime.Now 获取当前系统时间,然后使用 nodatime 获取其他区域的时间,如下所示(基于 Matt Johnson 回复关于 SO 的另一个问题时提供的代码):
选项 2:经过进一步研究,我找到了这个解决方案,并且觉得它也可以像这样很好地工作:
现在让我尝试解决这个问题:在上述两个选项中,依赖于DateTime.Now或SystemClock.Instance.Now以首先识别用户的系统时间,然后将其转换为所需时区的城市时间。但是如果用户的系统没有设置正确的时间会怎样呢?我相信(如果错了,请纠正我) DateTime.Now 和 SystemClock.Instance.Now 都使用系统时钟来获取当前时间?假设系统时间设置不正确,那么由于我们对用户系统时间的依赖,任何时区转换都会简单地显示其他城市的错误时间。
在这种情况下,如何在不依赖系统时钟的情况下确定用户的当前时间?我应该恢复使用网络服务来使用 lat/long 获取用户的当前时区,还是有更好的选择使用可以离线工作的 NodaTime 等?谢谢。
c# - 使用 NodaTime 按经纬度获取国家代码
由于 NodaTime 在 olson 数据库中已经有纬度/经度和国家/地区代码数据,我想知道我们是否可以指定任何纬度/经度(比如 Windows 商店应用程序中 GeoLocator.GetGeopositionAsync 返回的任何纬度/经度)并确定时区和国家代码从中?
与此类似的var zone = session.GetZoneForLocation(latitude, longitude);
内容:来自https://github.com/mj1856/Raven.TimeZones
我专门研究像 NodaTime 这样的离线解决方案,而不是使用 Web 服务。
c# - 从本地时间转换为 GMT(使用 nodatime 的世界时钟应用程序)
我正在尝试使用 Nodatime 编写世界时钟,并且我已经在网上搜索了有关如何使用该库的示例,并且我已经阅读了文档,它说 Instant 类只是一些“滴答声”,因为一些任意的纪元 Unix 纪元,对应于 1970 年 1 月 1 日 UTC 的午夜。好吧,我凭经验猜测,如果我将 GMT 值用作 Instant 值,那么我可以用它计算每个时区的时间值(创建世界时钟),并且它起作用了。我遇到的问题是,我不知道从当地时间计算 GMT 时间(或 GMT 时刻)的简单方法,我的时区是“America/Mexico_City”,所以我的问题是,有没有捷径已经在 Nodatime 中定义了从本地时间获取 GMT 时间,或者另一方面,是否有一种简单的方法来实现“
c# - 给定一个 DateTimeZone 和两个 Instant,确定 LocalTime 是否介于两个 Instant 之间
对于我的每个用户,我存储一个tzid
我将其转换为DateTimeZone
关于他们当地时区的持有信息。
我想在当地时间上午 8 点每天向用户发送一封电子邮件;如果上午 8 点由于某种原因(如夏令时班次)而模棱两可,我只需要选择上午 8 点中的一个即可;我不在乎哪个。
我的作业每小时运行一次,我有一个Instant
包含作业的最后运行时间,另一个Instant
包含作业的下一次运行时间。
鉴于这两个Instant
被调用的previousRun
andnextRun
和被DateTimeZone
调用的tz
,我将如何确定被localTime
调用是否eightAM
落在此作业运行的范围内?如果是这样,我需要向用户发送电子邮件。
c# - 使用 Noda Time 在时区之间转换
我目前正在尝试确保我们的旧后端可以支持根据用户当前的时区(或者,更具体地说是偏移量)解析日期时间。我们的服务器采用东部标准时间,我们的大部分日期时间都来自那里。但是,对于处于其他时区的用户,在检索这些日期时间时需要转换到他们的时区(或者,在这种情况下,偏移量)。此外,来自用户的日期时间必须转换为东部标准时间,然后才能在服务器上持久化。鉴于我们正在开发的前端是基于 Web 的,我能够在几分钟内检索到用户的偏移量,并将该值传递到我的标头中的服务层。我查看了 Noda Time 并认为它是一个很棒的 API。它确实迫使我以更精致的方式思考时间,但我仍然不能 100% 确定我是否正确使用了它。以下是我为上述转换编写的方法。我已经对它们进行了测试,它们似乎有效。鉴于上述情况,这看起来像是对库的正确使用吗?我是否在正确考虑约会时间?
这里的想法是,当我在 UTC 时间和数据库中的时区之间进行解析时,时区很重要。当我在客户端时间和 UTC 时间之间进行解析时,偏移量很重要。
以后我们可以坚持UTC时间,这样会更容易。目前,这种解决方案是权宜之计。
我们的想法是,我们将从...
客户端 -> UTC +/- 偏移量 -> UTC -> 东部时间 -> 数据库
数据库 -> 东部时间 -> UTC -> UTC +/- 偏移量 -> 客户端
最终……
客户端 -> UTC +/- 偏移量 -> UTC -> 数据库
数据库 -> UTC -> UTC +/- 偏移量 -> 客户端
.net - 我应该如何将本地 DateTime 转换为 Instant?
我有一种情况,我想将 a 转换DateTime
为Instant
. 我相信会DateTime
的。Kind
Local
鉴于DateTime
is 在一个名为 的变量中time
,我在库中能找到的最接近的是:
这似乎是合理的,但我想确定这是完全可靠的,并且没有数据丢失或损坏的风险。我不确定这是否是进行转换的最佳方式,或者是否有更可靠的方法来实现。
我查看了 NodaTime 的BCL Conversions页面,它对这种情况说了以下内容:
请注意,没有
DateTime
与 a 的转换Local
- 这实际上适用于系统默认时区,您通常应该明确地开始使用它。
asp.net-mvc-4 - 使用 mvc4 中的 noda 时间将 UTC 时间转换为巴西时间
我在 MVC4 项目中工作。在这个项目中,我需要将 UTC 时间转换为从服务器到巴西时区的时间。
如何在 noda 时间库中将 UTC 时间转换为巴西时间。
c# - 如何在 ServiceStack.OrmLite 中自定义复杂类型的序列化/反序列化
我正在使用 ServiceStack.OrmLite 将数据保存在SQLite
数据库中,到目前为止我对此非常满意。
但是,我的许多对象都具有复杂类型的属性,我不想使用JSV
.
我需要能够指定应该用于将属性存储在数据库中的自定义序列化/反序列化(作为字符串)。在db4o
世界上这相当于使用IObjectConstructor
.
无法正确序列化和反序列化的复杂类型的一个很好的例子是 NodaTime 类型,即使它们可以很容易地映射到字符串(我已经有了与 一起使用的序列化/反序列化函数db4o
)。
实现这一目标的最简单方法是什么?包装器不是很方便,因为我必须为包含这种复杂类型的属性的每种类型编写和维护一个包装器。