Tag: nodatime

创建一个代表“今天”的NodaTime LocalDate

建议表示“今天”的LocalDate实例的建议方法是什么。 我期待在LocalDate类中有一个静态的“Now”或“Today”属性,但是没有。 我目前的方法是使用DateTime.Now: var now = DateTime.Now; LocalDate today = new LocalDate(now.Year, now.Month, now.Day); 有没有更好的办法?

使用Noda Time在时区之间进行转换

我目前正在尝试确保我们的传统后端可以根据用户的当前时区(或更具体地说是偏移量)支持解析日期时间。 我们的服务器在东部标准时间,我们的大部分日期时间都来自那里。 但是,对于位于其他时区的用户,在检索这些日期时间时需要转换到其时区(或者,在这种情况下为偏移)。 此外,来自用户的日期时间必须在服务器上持久化之前转换为东部标准时间。 鉴于我们正在开发的前端是基于Web的,我能够在几分钟内检索用户的偏移量,并将该值传递到标头内的服务层。 我看了Noda Time并认为它是一个很棒的API。 它确实迫使我在更精致的事情中考虑时间,但我仍然不能100%确定我已正确使用它。 以下是我为上述转换编写的方法。 我测试了它们,它们似乎工作。 鉴于上面的场景,这看起来像是对图书馆的正确使用吗? 我正确地考虑约会时间吗? public static DateTime ConvertToUtcFromEasternTimeZone(DateTime easternDateTime) { NodaTime.DateTimeZone easternTimeZone = NodaTime.DateTimeZoneProviders.Tzdb.GetZoneOrNull(“America/New_York”); ZoneLocalMappingResolver customResolver = Resolvers.CreateMappingResolver(Resolvers.ReturnLater, Resolvers.ReturnStartOfIntervalAfter); var easternLocalDateTime = LocalDateTime.FromDateTime(easternDateTime); var easternZonedDateTime = easternTimeZone.ResolveLocal(easternLocalDateTime, customResolver); return easternZonedDateTime.ToDateTimeUtc(); } public static DateTime ConvertToEasternTimeZoneFromUtc(DateTime utcDateTime) { NodaTime.DateTimeZone easternTimeZone = NodaTime.DateTimeZoneProviders.Tzdb.GetZoneOrNull(“America/New_York”); NodaTime.DateTimeZone utcTimeZone = NodaTime.DateTimeZoneProviders.Tzdb.GetZoneOrNull(“UTC”); ZoneLocalMappingResolver customResolver […]

Instant.Now为NodaTime

我正试图让Jon Skeet(以及其他人)使用Noda Time框架。 我正试图现在存储当前(即时)。 Instant是从长时间刻度创建的,但是现在的Ticks数量是多少呢? 是吗: Instant now = new Instant(DateTime.Now.ToUniversalTime().Ticks); 还是? Instant now = Instant.FromDateTimeUtc(DateTime.Now.ToUniversalTime()); 它们是否相同,我甚至做得对吗? PS,如果Jon回答这个问题 – 我想提出一个Instant.Now属性。 PS2我知道标题包含一个标签,但它不会让我有一个简短的“Instant.Now”标题。

NodaTime中时区的长表名称

在NodaTime中,如果给出tz时区id,你如何找到时区的长格式名称? 例如,如果我提供“America / Los_Angeles”,我应该回到“太平洋标准时间”。

来自Week和WeekYear的LocalDate

使用NodaTime库,如何根据周数和周WeekYear计算一周中第一天的LocalDate。 与此相反: var date = new LocalDate(2012, 1, 1); int weekYear = date.WeekYear; // 2011 int weekNr = date.WeekOfWeekYear; // 52 像这样的假代码: var newDate = LocalDate.FirstDayFromWeek(weekYear, weekNr);

在NodaTime中获得夏令时开始和结束时间

如何使用Noda Time获取夏令时的开始和结束日期? 下面的function完成了这个任务,但它非常笨拙,并且正在寻求一个更简单的解决方案。 /// /// Gets the start and end of daylight savings time in a given time zone /// /// The time zone in question /// A tuple indicating the start and end of DST /// Assumes this zone has daylight savings time private Tuple GetZoneStartAndEnd(DateTimeZone tz) { int thisYear = TimeUtils.SystemLocalDateTime.Year; // Get […]

Noda Time – 带区域的开始/结束日期

在代码运行的系统上设置的时区中,获取ZonedDateTime(表示当前日期的开始和结束)的正确和更简洁的方法是什么? 以下代码是不是太复杂了? ZonedDateTime nowInZone = SystemClock.Instance.Now.InZone(DateTimeZoneProviders.Bcl.GetSystemDefault()); ZonedDateTime start = new LocalDateTime(nowInZone.Year, nowInZone.Month, nowInZone.Day, 0, 0, 0).InZoneStrictly(DateTimeZoneProviders.Bcl.GetSystemDefault()); ZonedDateTime end = new LocalDateTime(nowInZone.Year, nowInZone.Month, nowInZone.Day, 23, 59, 59).InZoneStrictly(DateTimeZoneProviders.Bcl.GetSystemDefault()); 鉴于这些值,我需要测试另一个ZonedDateTime是否在它们之间。

如何使用不同的时区Nodatime将UTC日期和时间转换为当地时间

我正在使用从外部服务器通过互联网获取日期时间的function。 这是我用来获取日期和时间的function,而不依赖于用户的PC日期时间设置。 using NodaTime; using NodaTime.Text; using System.IO; using System.Globalization; public static DateTime GetFastestNISTDate() { var result = DateTime.MinValue; DateTime utcDateTime = DateTime.MinValue; // Initialize the list of NIST time servers // http://tf.nist.gov/tf-cgi/servers.cgi string[] servers = new string[] { “nist1-ny.ustiming.org”, “nist1-nj.ustiming.org”, “nist1-pa.ustiming.org”, “time-a.nist.gov”, “time-b.nist.gov”, “nist1.aol-va.symmetricom.com”, “nist1.columbiacountyga.gov”, “nist1-chi.ustiming.org”, “nist.expertsmi.com”, “nist.netservicesgroup.com” }; // Try 5 servers in […]

DateTime.Now和Culture / Timezone特定

我们的应用程序旨在处理来自不同地理位置的用户。 我们无法检测当前最终用户当地时间和时区对其进行操作的情况。 他们选择不同的文化,如sv-se,en-us,ta-In甚至他们从欧洲/伦敦时区访问.. 我们在美国的托管服务器中托管它,应用程序用户来自Norway/Denmark/Sweden/UK/USA/India 问题是我们使用DateTime.Now来存储记录创建/更新日期等。 由于服务器在美国运行,所有用户数据都保存为美国时间:( 在SO中研究之后,我们决定将所有历史日期存储在DB中作为DateTime.UtcNow 问题: 在29 Dec 2013, 3:15 PM Swedish time创建了一条纪录。 public ActionResult Save(BookingViewModel model) { Booking booking = new Booking(); booking.BookingDateTime = model.BookingDateTime; //10 Jan 2014 2:00 PM booking.Name = model.Name; booking.CurrentUserId = (User)Session[“currentUser”].UserId; //USA Server runs in Pacific Time Zone, UTC-08:00 booking.CreatedDateTime = DateTime.UtcNow; //29 Dec 2013, 6:15 AM […]

DateTimeOffset如何处理夏令时?

我知道DateTimeOffset存储UTC日期/时间和偏移量。 我也从MSDN博客文章中了解到DateTimeOffset应该用于“使用夏令时”。 我正在努力理解的是DateTimeOffset“如何工作夏令时”。 我的理解,很少有,是夏令时是一个政治决定,不能从纯粹的抵消推断出来。 如果它只存储一个偏移量,那么这个结构对DST是否友好呢? 我认为可能有一种方法可以将TimeZoneInfo类与DateTimeOffset结合使用。 我该怎么办? 最后,有什么更好的方法可以实现以下目标吗? (我看过Jon Skeet关于Noda-Time的一些post,但我认为它尚未准备好生产,我不知道它是否能很好地融入我们现有的解决方案)。 这是我们的场景。 该服务器是出于在英国时间运行的不幸遗留原因。 我们的客户开始从澳大利亚投入运营,其中有多个时区。 其他国家可以随时投入使用。 我们有一个基于Hardcodet调度程序的调度程序 (使用DateTimeOffset)。 它工作得很好。 但是,在我们的数据库中,我们只存储足够的数据来构造DateTime对象(见下文),在我们的子类和管道代码中我们只使用DateTime,因为最初我们只支持英国用户。 该调度程序负责固定和动员工厂设备。 因此,计划的事件在用户的DST调整的本地时间运行至关重要。 用户在我们的网站上输入时间表; 目前,它作为星期几,小时和分钟存储在数据库中。 当读取数据时,我们为下一天,小时和分钟的出现创建一个DateTime对象。 我可以自由地更改db结构以另外存储偏移量或时区。 当该日期和时间到达时,调度程序发送命令(并重试一段时间)。 然后它会在下周的同一天和时间再次运行(尽管该服务实际上已经被回收,代码将再次运行)。 我需要实现的是使用从Hardcodet子类调度的调度程序在该时区调整的本地日期和时间触发调度事件。 如果DateTimeOffset确实是DST感知的,那么我需要做的就是存储一个偏移量并改变我们的管道代码以使用这个结构,但我得到的印象并不是那么简单。 (我们或许可以从工厂的GPS位置获取当前时区,但这是另一天的讨论:))。