首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Noda Time入门

Noda Time入门
EN

Stack Overflow用户
提问于 2013-03-22 18:54:44
回答 1查看 11.3K关注 0票数 18

我希望将Noda time用于一个相当简单的应用程序,但是我正在努力寻找任何文档来处理一个非常基本的用例:

我有一个登录的用户,并将在设置中存储他们的首选时区。来自客户端的任何日期/时间都是已知文本格式(例如"dd/MM/yyyy HH:mm"),具有已知的时区id (例如“欧洲/伦敦”)。我计划将这些时间转换为UTC/Noda即时时间,以避免在数据库中存储每个日期的时区信息。

首先,这听起来像是一种明智的方法吗?我几乎可以自由地改变任何事情,所以我很高兴被设置在一个更好/更明智的路线上。数据库是使用C#驱动程序的MongoDb。

我所尝试的就是沿着这些路线,但努力克服第一步!

代码语言:javascript
复制
var userSubmittedDateTimeString = "2013/05/09 10:45";
var userFormat = "yyyy/MM/dd HH:mm";
var userTimeZone = "Europe/London";

//noda code here to convert to UTC


//Then back again:

我知道有人会问“你尝试过什么”,而我得到的只是各种失败的转换。很高兴被指向“Noda time入门”页面!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-23 02:30:47

我计划将这些时间转换为协调世界时/Noda时刻,以避免需要在数据库中存储每个日期的所有时区信息。

如果您稍后不需要知道原始时区,这是很好的。(例如,如果用户更改了时区,但仍希望在原始时区中重现某些内容)。

不管怎样,我会把它分成三个步骤:

解析为LocalDateTime

  • Converting的ZonedDateTime

  • Converting解析为Instant

类似于:

代码语言:javascript
复制
// TODO: Are you sure it *will* be in the invariant culture? No funky date
// separators?
// Note that if all users have the same pattern, you can make this a private
// static readonly field somewhere
var pattern = LocalDateTimePattern.CreateWithInvariantCulture("yyyy/MM/dd HH:mm");

var parseResult = pattern.Parse(userSubmittedDateTimeString);
if (!parseResult.Success)
{
    // throw an exception or whatever you want to do
}

var localDateTime = parseResult.Value;

var timeZone = DateTimeZoneProviders.Tzdb[userTimeZone];

// TODO: Consider how you want to handle ambiguous or "skipped" local date/time
// values. For example, you might want InZoneStrictly, or provide your own custom
// handler to InZone.
var zonedDateTime = localDateTime.InZoneLeniently(timeZone);

var instant = zonedDateTime.ToInstant();
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15568561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档