在NodaTime中,如果给出tz时区id,你如何找到时区的长格式名称?
例如,如果我提供"America/Los_Angeles",我应该回到"太平洋标准时间".
我有一个问题将时间值反序列化为LocalTime-授予,我对NodaTime很新.我想导入一个Web服务结果,该结果以"HH:mm"格式列出时间.除非我以"hh:mm:ss.fff"格式使用时间,否则我会收到异常.有没有办法指定不同的模式并让"HH:mm"起作用?
请参阅此代码
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using NodaTime;
using NodaTime.Serialization.JsonNet;
using NodaTime.Text; // Required for LocalTimePattern
namespace TestNodaTime
{
class MyObject
{
[JsonProperty("var1")]
public int MyProperty { get; set; }
[JsonProperty("time")]
public LocalTime MyTime { get; set; }
}
class Program
{
static void Main(string[] args)
{
string serializedObject1 = "[{\"var1\":\"42\",\"time\":\"01:02:03.004\"}]";
string serializedObject2 = "[{\"var1\":\"42\",\"time\":\"01:02\"}]";
JsonSerializerSettings jss = new JsonSerializerSettings();
jss.ConfigureForNodaTime(DateTimeZoneProviders.Bcl);
// This works - the pattern is "hh:mm:ss.fff"
MyObject mo1 = JsonConvert.DeserializeObject<List<MyObject>>(serializedObject1, jss)[0];
// This causes an …Run Code Online (Sandbox Code Playgroud) 我正在转换一些应用程序代码以使用NodaTime类而不是System.DateTime.我的应用程序的一部分使用PropertyGrid控件允许用户编辑包含LocalDate和Instant的类.在不更改任何内容的情况下,PropertyGrid可以显示属性,但它们不再可编辑.允许用户编辑这些字段的最佳方法是什么.
为了便于说明,我们可以使用此类作为我想要显示和编辑的事物类型的代表:
public class User
{
public string Name { get; set; }
public LocalDate BirthDate { get; set; }
public Instant NextAppointment { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 我试图用 C# 表示公司的成立日期。我偶尔会有一整天、一月和一年的时间,但更多时候我只有一个月和一年,或者有时只有一年。
有没有一种方法可以在 NodaTime 中表示这一点,以便还允许它们之间的比较?即2012 < June 2013 == true,但2013 < June 2013 == false因为它是同一年。
我还需要能够明确检索存储的数据。我明确的意思是我不能存储2013as1/1/2013因为我无法检索我只知道日期的信息2013。
我无法通过WebAPI对NodaTime的LocalTime进行序列化和反序列化.
类定义
public class ExampleClass
{
public LocalTime ExampleLocalTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
尝试序列化输出
// create example object
var exampleclass = new ExampleClass()
{
ExampleLocalTime = new LocalTime(DateTime.Now.Hour, DateTime.Now.Minute)
};
// serialise output
var jsonsettings = new JsonSerializerSettings()
{
DateParseHandling = DateParseHandling.None,
NullValueHandling = NullValueHandling.Ignore
};
jsonsettings.Converters.Add(new IsoDateTimeConverter());
string exampleoutput = JsonConvert.SerializeObject(exampleclass, Formatting.Indented, jsonsettings);
Run Code Online (Sandbox Code Playgroud)
我希望格式化为ISO格式的时间格式,例如12:34:53,而是将其解串行化为以下,本地时间表示为刻度;
{"ExampleLocalTime":{"ticks":553800000000}}
在反序列化和序列化时,我需要添加什么来避免Ticks?
好的,我有一个托管在中央标准时区的Web服务器.IIS服务器配置为时区,因此每当在服务器上使用DateTime.Now或创建类型为Local的新DateTime时,它都处于中央时间.
问题是该网站是(国际)国内申请,我可以在美国或加拿大的任何地方拥有客户.该网站拥有的一个东西是用于安排约会的"调度程序".我们决定易于开发,以UTC格式将所有DateTime值存储在数据库中,并且所有流入和流出API的流量也都是UTC.问题是当我在服务器端创建日期/时间值时,我经常遇到问题.
比方说,我需要以编程方式为服务器上太平洋标准时区的客户端创建约会,时间为上午8点.在过去,我做过这样的事情:
var appointment = new new DateTime(2015, 04, 17, 08, 00, 00, DateTimeKind.Unspecified)
var utcAppointment = TimeZoneInfo.ConvertTimeToUtc(appointment,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"))
Run Code Online (Sandbox Code Playgroud)
我在我的程序中做了很多其他的日期/时间操作,我想要去Nodatime而不是.我知道我可以很容易地从Nodatime变量中获取UTC DateTime.我感到困惑的是如何在特定日期/时间为特定时区创建Nodatime变量?我看到的所有例子都与模式和阅读字符串或创建一个基本上是"现在"的Instant有关.我想做一些事情,比如使用现有的BCL DateTime对象,无论"Kind"如何,并将其转换为具有我设置的特定时区的Nodatime对象.
我认为Nodatime是一个很棒的图书馆,但阅读用户指南只会让我对转换进出BCL感到头疼.
我想通过提供国家/地区代码,使用 NodaTime 将特定日期时间值转换为 UTC。
例如,国家是土耳其,国家代码是 TR,具体日期时间是“2016 年 2 月 5 日 7:45 PM”,那么可能是“2016 年 2 月 5 日 5:45 PM”吗?
另外我的窗户位置不是土耳其。
先感谢您?
我正在寻找OffsetTimeNodaTime的某种支持,但我没有看到任何东西.我正在以"17:13:00 + 10:00"等格式接收数据.我将此视为时间偏移,将其应用于给定日期(用户可以控制)到达当地时间以进行显示.
我能想出的最好的是:
// the date for this OffsetDateTime will be 1/1/2000
var parsed = OffsetDateTimePattern.CreateWithInvariantCulture("HH:mm:sso<G>").Parse(input).Value;
var desiredLocalDate = new LocalDate(2017, 06, 13);
var adjusted = new OffsetDateTime(
new LocalDateTime(desiredLocalDate.Year, desiredLocalDate.Month, desiredLocalDate.Day, parsed.Hour, parsed.Minute, parsed.Second, parsed.Millisecond),
parsed.Offset);
var localTime = adjusted.LocalDateTime;
Run Code Online (Sandbox Code Playgroud)
我想我想知道我是否忽略了更好的方法来做到这一点.
我想将活动(未弃用)时区 ID 列表返回给用户。使用TzdbDateTimeZoneSource.Default.ZoneLocations.ToList()我可以列出所有时区,但我没有找到如何过滤掉不推荐使用的区域。在最坏的情况下,我可以基于https://en.wikipedia.org/wiki/List_of_tz_database_time_zones建立我自己的列表,但会更高兴从 NodaTime 生成列表。
如何从 NodaTime 获取“时区”列表,以便我可以制作如下所示的 UI 供用户选择?
我想显示 UTC 偏移量,然后显示相应的城市/国家/地点。它不需要与下面的完全一样,但你知道,很接近。
DateTimeZone没有 name 属性,并且ing 会产生重复项(来自fromToString()的列表)。IdsIDateTimeZoneProvider
我看到你可以从〜国家到地区,但这TzdbDateTimeZoneSource.Default.ZoneLocations也不是我正在寻找的。我可以看到如何将这两个数据源拼凑在一起,但这感觉像是一个已解决的问题,我不应该重新发明。