标签: nodatime

使用 ServiceStack / OrmLite 在 SQL Server 中持久化 Nodatime Instant

我在InstantServiceStack 的 DTO 中使用 NodaTime进行日期/时间存储。我已将 DTO 中的 SQL 类型指定为datetimeoffset,ServiceStack 正确创建了具有该类型的表。但是,在保存时,我得到一个InvalidCastException.

简单的例子:

public class ItemWithInstant
{
    public int Id { get; set; }
    public string Name { get; set; }
    [CustomField("DateTimeOffset")
    public Instant DateCreated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在服务中:

public object Post(CreateItemWithInstant request)
{
    var dto = request.ConvertTo<ItemWithInstant>();
    Db.Save(dto); // ERROR here
    return dto;
}
Run Code Online (Sandbox Code Playgroud)

具体的错误是一个InvalidCastException带有Failed to convert parameter value from an Instant to a String 的详细信息。

不知道为什么当数据库类型为DateTimeOffset. 我是否需要告诉 …

c# sql-server servicestack nodatime ormlite-servicestack

5
推荐指数
1
解决办法
934
查看次数

使用 NodaTime 将特定国家/地区日期时间转换为 UTC

我想通过提供国家/地区代码,使用 NodaTime 将特定日期时间值转换为 UTC。

例如,国家是土耳其,国家代码是 TR,具体日期时间是“2016 年 2 月 5 日 7:45 PM”,那么可能是“2016 年 2 月 5 日 5:45 PM”吗?

另外我的窗户位置不是土耳其。

先感谢您?

c# nodatime

5
推荐指数
1
解决办法
2544
查看次数

如何使用 NodaTime 过滤已弃用的时区?

我想将活动(未弃用)时区 ID 列表返回给用户。使用TzdbDateTimeZoneSource.Default.ZoneLocations.ToList()我可以列出所有时区,但我没有找到如何过滤掉不推荐使用的区域。在最坏的情况下,我可以基于https://en.wikipedia.org/wiki/List_of_tz_database_time_zones建立我自己的列表,但会更高兴从 NodaTime 生成列表。

c# timezone nodatime

5
推荐指数
0
解决办法
367
查看次数

使用 DateTimeOffset 作为参数问题进行过滤

我正在使用 C# 程序处理日期。

我想过滤任何具有 DateTime、DateTime2、DateTimeOffset 列的表。

我将LastRefreshDateas存储DateTimeOffSet为 UTC,并使用它来过滤这些表上的数据。我调整偏移量(使用NodaTime)LastRefreshDate我根据用于在这些表中存储日期的时区通常,它是由用户给出的。

所以我创建了一个测试样本来解释这个问题。通常,SQL 查询是动态的,参数也是动态的。这是示例代码:

[TestMethod]
public void Test()
{
    using (SqlConnection connection = new SqlConnection("Server=myserver;Database=mydb;User ID=admin;Password=admin"))
    {
        connection.Open();
        using (SqlCommand command = new SqlCommand("SELECT [TimeStamp] FROM  [dbo].[DATA] WHERE [TimeStamp] >= @p0", connection))
        {
            string datestring = "2019-06-18 13:35:20.1133868 -04:00";

            // Does not work
            // DateTimeOffset p0 = DateTimeOffset.Parse(datestring, CultureInfo.InvariantCulture);
            // Does work
            DateTime p0 = DateTime.Parse(datestring, CultureInfo.InvariantCulture);
            command.Parameters.AddWithValue("@p0", p0);
            using (SqlDataReader reader = command.ExecuteReader())
            {
                var dataTable = …
Run Code Online (Sandbox Code Playgroud)

c# sql-server timezone timezone-offset nodatime

5
推荐指数
1
解决办法
2513
查看次数

NSwag:如何在 C# -&gt; Swagger -&gt; C# 客户端中使用自定义值对象类型?

我有一个在输入和输出中都使用Noda Time类型的 API 。使用默认的 Noda Time 序列化格式(基本上是 ISO-8601 格式)将类型序列化为 JSON 中的字符串。

我有一个看起来像这样的对象:

public class NodaTimeDataStructure
{
    public System.DateTime DateTime { get; set; }
    public DateInterval DateInterval { get; set; }
    public DateTimeZone DateTimeZone { get; set; }
    public Duration Duration { get; set; }
    public Instant Instant { get; set; }
    public Interval Interval { get; set; }
    public IsoDayOfWeek IsoDayOfWeek { get; set; }
    public LocalDate LocalDate { get; set; }
    public LocalDateTime LocalDateTime { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# swagger nodatime swagger-codegen nswag

5
推荐指数
1
解决办法
2867
查看次数

如何获取 NodaTime 中的时区列表

如何从 NodaTime 获取“时区”列表,以便我可以制作如下所示的 UI 供用户选择?

我想显示 UTC 偏移量,然后显示相应的城市/国家/地点。它不需要与下面的完全一样,但你知道,很接近。

DateTimeZone没有 name 属性,并且ing 会产生重复项(来自fromToString()的列表)。IdsIDateTimeZoneProvider

我看到你可以从〜国家到地区,但这TzdbDateTimeZoneSource.Default.ZoneLocations也不是我正在寻找的。我可以看到如何将这两个数据源拼凑在一起,但这感觉像是一个已解决的问题,我不应该重新发明。

示例列表

.net timezone localization nodatime

5
推荐指数
2
解决办法
3127
查看次数

使用NodaTime解析输入并输出不同的dateTime格式

我目前正在使用NodaTime来解析日期和输出日期

public static string nodaTimeTest6(string input)
{
    var defaultValue = new OffsetDateTime(new LocalDateTime(2000, 1, 1, 0, 0), Offset.Zero);
    var pattern = OffsetDateTimePattern.Create("yyyy-MM-dd'T'HH:mm:sso<m>", CultureInfo.InvariantCulture, defaultValue);
    var result = pattern.Parse(input);

    return result.Value.Month + "/" + result.Value.Day + "/" + result.Value.Year + " " + result.Value.ClockHourOfHalfDay;
}
Run Code Online (Sandbox Code Playgroud)

例如,输入是这样的: 2014-03-11T02:00:00-07:00

如果我的return声明如下:return result.Value.ToString(),那么输出将如下所示:2014-03-11T02:00:00-07

我理解使用NodaTime属性(这是一个救生员),但是,我对这样的输出感兴趣:

yyyy-MM-dd HH:mm:ss

yyyyMMdd HH:mm:ss

dd/MM/yyyy hh:mm

所以我试着将我的return陈述改为:

return result.Value.Month + "/" + result.Value.Day + "/" + result.Value.Year + " " + result.Value.Hour + ":" …

c# datetime nodatime

4
推荐指数
1
解决办法
1033
查看次数

如何忽略NodaTime nuget包xml文档文件中对jetbrains.annotations.dll的引用

我非常依赖Resharper上下文操作来生成样板代码.直到最近,上下文操作的Check参数生成了执行空检查并相应抛出的代码.但是,现在它正在将[NotNull]参数的Resharper特定注释添加为方法签名的一部分.

看看这个相关问题Stop ReSharper来自添加注释,我已经在我的解决方案代码库中查看了jetbrains.annotations.dll参考资料,但没有找到任何参考资料.

但是,搜索所有文件我在NodTime(NodaTime.xml)jetbrains.annotations.dll的xml文档文件中找到了引用.

具体来说,这样的条目: <member name="T:JetBrains.Annotations.NotNullAttribute">.

我并非断然断言这是根本原因.但是,NodaTime是我自问题开始以来添加的最新nuget包,并且解决方案中的grep显示这是单一参考点.

xml文档文件是否应该包含这些引用,如果是这样,有没有办法让我配置Resharper来忽略它们?

更新 我已经反编译了NodaTime程序集,虽然它没有对jetbrains.annotations.dll的任何二进制引用,但它确实(重新)声明了违规的JetBrains.Annotations命名空间和注释本身.

根据citizenmatts的建议,我用Resharper 带我去定义[NotNull]属性的工具,这就是NodaTime.dll

我还注意到NotNullResharper所包含的属性不会编译和抱怨Cannot reference internal class NotNullAttribute.因此,我显然没有包含jetbrains.annotations.dll.

更新2 刚刚完成了在VS2013中创建一个新的空白项目并检查Resharper中的空检查上下文操作的明显事情.然后添加NodaTime nuget包并重新检查 - 实际上它添加了[NotNull]属性,项目不会编译.

更新3 正如Jon Skeet所建议的那样,我尝试使用Resharper - > Code Inspection - > Code Annotations - > Unticking JetBrains.Annotations"关闭"数据注释.但是,这没有任何影响,并且继续包含NotNull属性.

看起来我可能只需要返回System.DateTime.

c# resharper visual-studio nuget nodatime

4
推荐指数
1
解决办法
2371
查看次数

使用NodaTime自动道具将模型发布到WebAPI

我们正在项目中使用NodaTime作为时间/日期模型.该项目是一个使用WebAPI的Web应用程序.尝试发布包含LocalTime autoprops的模型时,我们会收到InsufficientExecutionStackException.

为了将我们的项目与此问题隔离开来,我创建了一个新的WebAPI项目.使用NuGet,我将NodaTime和NodaTime.Serialization.JsonNet添加到项目中.在Startup.cs,我ConfigureForNodaTime这样使用:

GlobalConfiguration.Configure(x =>
{
    x.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
    x.Formatters.JsonFormatter.SerializerSettings.ConfigureForNodaTime(
    DateTimeZoneProviders.Tzdb);
});
Run Code Online (Sandbox Code Playgroud)

在(样板ValuesController.cs文件)文件中,我这样被劫持Post:

// POST api/values
public void Post(TestClass input)
{
    var x = input;
}

public class TestClass
{
    public LocalTime Open { get; set; }
    public LocalTime Close { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当发布此输入模型(通过邮递员),而不是接收本地时间时,我在本文末尾收到错误.

如果我们TestClass如图所示重写,则不会发生错误,并且我们得到正确的本地时间:

public class TestClass
{
    public LocalTime;
    public LocalTime;
}
Run Code Online (Sandbox Code Playgroud)

我能做些什么来让应用程序与autoprops一起工作吗?虽然我可以(也可能会)开始用字段替换autoprops,但了解这里发生的事情会很好.

这是整个错误,从中间删除了800个任意行:

{
"message":"An error has occurred.",
"exceptionMessage":"Insufficient stack to continue executing the program safely. This …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api nodatime

4
推荐指数
1
解决办法
748
查看次数

如何获得nodatime中两个日期之间的天数

我需要使用NodaTime计算两个日期之间的天数,并在时区中进行计算.

结束时间是基于当天结束时暗示的午夜时间.这个日期是在时区.

开始时间是当前时间,但我将它传递给函数,以便该函数是可测试的.

我尝试使用Period,这似乎是明显的答案,但是Period在一端太过细化(当我们在结束日时)并且当我们超过1个月之后不够精细.

因此,如果现在是美国/多伦多的7月9日,下午5:45,结束时间是9月1日00:00:00,那么我希望能够计算54天.(假设我正确计算了我日历上的天数.:))

我想我自己必须处理子日问题,但当我不得不弄清楚如何处理一个多月的问题时,我感到很惊讶.

是否有明显的方法可以从NodaTime获得两次之间的天数?我使用.Net的DateTime和TimezoneInfo类将它归结为三行代码,但我想转移到NodaTime,原因是网站上指定的所有原因.

谢谢

nodatime

4
推荐指数
1
解决办法
1295
查看次数