我有一个LocalDate和一个LocalTime,并希望简单地从它们创建一个LocalDateTime结构.我想到了以下扩展方法,我认为这是最快的但是由于一个不明原因,当前版本的API中不存在字段localTime.TickOfMillisecond.所以它不起作用.
public static LocalDateTime At(this LocalDate localDate, LocalTime localTime) {
return new LocalDateTime(localDate.Year, localDate.Month, localDate.Day, localTime.Hour, localTime.Minute, localTime.Second, localTime.Millisecond, localTime.TickOfMillisecond);
}
Run Code Online (Sandbox Code Playgroud)
那么,我是不是在平时使用:
public static LocalDateTime At(this LocalDate localDate, LocalTime localTime) {
return localDate.AtMidnight().PlusTicks(localTime.TickOfDay);
}
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏.
System.TimeZoneInfo有一个名为IsDaylightSavingTime的方法,该方法接受DateTime对象,如果指定的日期时间落在该时区的DST中,则返回true.在NodaTime中是否有相同的功能或其他方式来实现相同的结果?
所以我是NodaTime的新手,并尝试使用它来使用DateTimeZone对象存储时区信息.
我在下面的示例中看到了用户指南等,这给了我一个很好的来自tzdb的DateTimeZone对象.
var london = DateTimeZoneProviders.Tzdb["Europe/London"];
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 如何获得tzdb中使用的时区字符串列表("Europe/London").我环顾四周,无处可寻.在某处我可以参考标准清单吗?这是如何运作的?恩. - 我应该为EST传递的字符串是什么?
谢谢!
我的一个实体类可以作为BIGINT存储在sql server数据库中.我的问题是:如何获取实体框架上下文以了解如何存储和检索实体类的实例?
更多详情.我正在使用Noda Time,它可以表示比SQL或.NET datetime(更多)更广泛的日期范围(并且它是甜点顶部).我的实体类,Happening,是NodaTime的Instant类的包装器.我可以从一个长的设置发生的事情,并得到从发生长着像.SetFromLong(长即时)和.ToLong()的方法.
目前我的模型正在工作,保存包含dot net DateTime类型属性的类.如果我想使用我的自定义类型"Happening"的属性,我如何告诉Entity Framework如何保存它们?
如果我正在阅读这篇关于建模和制图的文章我是在正确的轨道上还是错过了更简单的东西?
http://msdn.microsoft.com/en-us/library/bb896343.aspx
我正在使用实体框架4.
我工作的项目基本上是一个数据收集器.通过定向,可以将其视为具有应用层(OSI第7层)的解析/分析功能的Wireshark(或等效物).目前的版本是传统的MFC应用程序,已有15年以上的时间.它仍然有效,但维护,稳定性和可扩展性是我们面临的真正问题.项目领导团队最近同意我们需要开始开发下一代产品,我们的目标是.NET,因为该产品严格来说是基于Windows桌面的产品.
鉴于我们的用户经常分析世界各地收集的日志文件,因此消息时间戳非常重要.当前产品用于_ftime_s()分配时间戳,我假设我们只是用来System.DateTime.UtcNow在.NET端获取未来的时间戳.也就是说,直到我读到noda-time.现在,我认为我们的问题领域需要更多关注与时间相关的功能,而不是我曾经考虑过的.
所以几个问题.
我正在使用ServiceStack.OrmLite将数据保存在SQLite数据库中,并且到目前为止对此非常满意.
但是,我的许多对象都具有复杂类型的属性,我不想将其序列化使用JSV.
我需要能够指定应该用于在数据库中存储属性的自定义序列化/反序列化(作为字符串).在db4o世界上,这相当于使用由提供的翻译功能IObjectConstructor.
无法正确序列化和反序列化的复杂类型的一个很好的例子是NodaTime类型,即使它们可以很容易地映射到字符串(我已经拥有了我使用的序列化/反序列化函数db4o).
实现这一目标的最简单方法是什么?包装器不是很方便,因为我必须为包含这种复杂类型属性的每种类型编写和维护一个包装器.
c# servicestack nodatime ormlite-servicestack servicestack-text
我正在使用 NodaTime 管理 .Net Core WebApi 中的日期和时区。库中的类型之一是 OffsetDateTime,它与 .Net 框架中的 DateTimeOffset 非常相似。我在任何地方都使用它以明确且透明的方式操作日期,因为日期有时会进入系统时区和用户时区。
我需要在某个时间点向某个日期添加一个月,但我无法向 OffsetDateTime 对象添加一个月,我所能做的就是累加直到小时或与日历无关的称为 Duration 的类型。如果它是 Instant 类型,我会理解,因为 Instant 以一种非常抽象的方式表示时间点,但不是 OffsetDateTime。OffsetDateTime 甚至有一个“日历”属性,它确实显示它绑定到日历系统,该系统应该允许您像我想做的那样进行算术,而不必进行类型转换等。
最重要的是,DateTimeOffset(来自 .net 框架)允许您添加月份,但我希望保持一致并在各处使用相同的类型。
长话短说,我做不到:
public OffsetDateTime GetPreviousMonth(OffsetDateTime input)
{
return input.AddMonths(-1)
}
Run Code Online (Sandbox Code Playgroud)
我只能做:
offsetDateTime.PlusHours(15)
offsetDateTime.PlusMinutes(3000)
offsetDateTime.Minus(Duration.FromMinutes(60))
offsetDateTime.Minus(Duration.FromHours(1))
Run Code Online (Sandbox Code Playgroud)
知道如何在不进行类型转换的情况下解决这个问题吗?也许我忽略了文档中的某些内容,但我不这么认为。
例如,如果我有以下代码:
var nodaStart = new LocalDate(2012, 5, 1);
var nodaEnd = new LocalDate(2012,5,2);
var daysBetween = Period.Between(nodaStart, nodaEnd,PeriodUnits.Day);
Run Code Online (Sandbox Code Playgroud)
然后 daysBetween.Days == 1
但是,我计算的范围需要计算为2天.即它需要包括开始和结束日期.
实际的方法可以采取开始和结束日期(相隔不超过一年),并需要计算天数.如果超过31天,则剩余的数量将返回整周.
我有那种逻辑工作正常,但因为计数是独家我有一天出去了.
我想我可以startDate.addDays(-1)在创建nodaStart它之前做,但我想知道是否有更优雅/漂亮的方式让noda返回Period.
谢谢
更新:我已经阅读了类的源代码,Period并且+运算符被重载,所以我可以添加
daysBetween += Period.FromDays(1);
Run Code Online (Sandbox Code Playgroud) 有没有理由说NodaTime JSON.net序列化程序不使用ISO8601时间间隔格式来表示开始和结束时刻?
示例ISO8601时间间隔:
"2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"
Run Code Online (Sandbox Code Playgroud)
NodaTime Complex JSON:
{ Start: "2007-03-01T13:00:00Z", End: "2008-05-11T15:30:00Z" }
Run Code Online (Sandbox Code Playgroud)
ISO8601格式是否不适合NodaTime中的区间概念?
我希望能够从csv文件中解析日期和/或日期时间值,并获取其DateTime格式(或使用Excel术语NumberFormat)。
例如,我想将“ 2008-06-07 00:00:00.000”传递给函数,并使其返回类似“ yyyy-MM-dd hh:mm:ss.000”的信息。
要注意的是,csv文件中可能有许多可能的日期格式,而且它们都不是提前知道的,所以我不能使用DateTime.TryParseExact(),因为它要求您提前知道DateTime格式字符串才能进行测试查看它是否具有特定值。
通过了解日期格式,我可以将其设置为Excel中的自定义数字格式,然后输入值,它将与csv文件的文本完全一样,同时还可以在Excel公式中使用它。
当然,可能存在歧义,因此理想情况下,获取可能的日期格式列表,然后通过查看可能的日期格式列表的交集,对多个日期进行检查以删除某些选项会比较好。
我刚刚发现了NodaTime API,看起来它可以执行类似的操作,但是我还没有看到示例代码可以实现此目的,因为有关类似查询的大多数问题都被要求提供早期版本,而没有似乎受到支持。
这样做的任何其他方法也将不胜感激。
正如乔恩·斯凯特(Jon Skeet)所说,我认为做到这一点的唯一方法是列出常见模式并进行测试。通过执行以下操作,可以获得所有文化的日期时间模式集。但是,此列表将缺少一些可能在使用中常见的自定义模式。例如(我不知道是否常用)yyyy / dd / MM不在列表中。
private static HashSet<string> _patterns;
public static HashSet<string> AllCulturedDateTimePatterns
{
get
{
if (_patterns != null)
return _patterns;
_patterns = new HashSet<string>();
var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
foreach (var culture in cultures)
{
_patterns.UnionWith(culture.DateTimeFormat.GetAllDateTimePatterns());
}
return _patterns;
}
}
Run Code Online (Sandbox Code Playgroud)