Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于Noda Time,如何使用LocalDate和LocalTime创建LocalDateTime_C#_.net_Datetime_Nodatime - Fatal编程技术网

C# 对于Noda Time,如何使用LocalDate和LocalTime创建LocalDateTime

C# 对于Noda Time,如何使用LocalDate和LocalTime创建LocalDateTime,c#,.net,datetime,nodatime,C#,.net,Datetime,Nodatime,我有一个LocalDate和一个LocalTime,只想从中创建一个LocalDateTime结构。 我想到了下面的扩展方法,我认为这是最快的,但由于一个模糊的原因,localTime.tickofmillistance字段在当前版本的API中不存在。所以它不起作用 public static LocalDateTime At(this LocalDate localDate, LocalTime localTime) { return new LocalDateTime

我有一个LocalDate和一个LocalTime,只想从中创建一个LocalDateTime结构。 我想到了下面的扩展方法,我认为这是最快的,但由于一个模糊的原因,localTime.tickofmillistance字段在当前版本的API中不存在。所以它不起作用

    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);
    }
那么,我是否被困在了使用:

    public static LocalDateTime At(this LocalDate localDate, LocalTime localTime) {
        return localDate.AtMidnight().PlusTicks(localTime.TickOfDay);
    }

非常感谢您的建议。

嗯,我不知道为什么API中没有。也许Jon Skeet可以回答这个问题

在第二个示例中,我看不出您的处理方式有任何错误,但您可以这样计算
滴答声毫秒

public static LocalDateTime At(this LocalDate localDate, LocalTime localTime)
{
    var tickOfMillisecond = localTime.TickOfSecond - localTime.Millisecond * 10000;
    return new LocalDateTime(localDate.Year, localDate.Month, localDate.Day, localTime.Hour, localTime.Minute, localTime.Second, localTime.Millisecond, tickOfMillisecond);
}
就我个人而言,我认为应该为
LocalDateTime
提供一个构造函数,因此您可以这样做:

var ldt = new LocalDateTime(localDate, localTime);

还有一件事——也许您的扩展方法应该验证日期和时间都在同一个日历系统中,然后将其传递给结果?除了ISO,我从来没有使用过任何日历,所以我不确定这一点。

这比您目前使用的方式简单得多-只需使用:


有一种方法可用于组合LocalDate和LocalTime以形成LocalDateTime

LocalDate date = ...;
LocalTime time = ...;
LocalDateTime dateTime=date.atTime(time);

谢谢你的提示。你知道它是故意丢失的还是在当前版本中被遗忘的?我在LocalTime中没有看到任何日历属性…我真的不知道。抱歉。@ErwinMayer:老实说,整个滴答声毫秒与滴答声秒之间的差异有点令人讨厌<代码>滴答声秒通常是一个更合理的值。。。但幸运的是,不管怎样,有一种更好的方式来做你想做的事情,正如我的回答:)太好了!谢谢出于可发现性的目的,可能值得包括一个等效的方法(特别是因为还有其他方法用于类似的任务)。@ErwinMayer:的确如此。我会考虑的。。。我不确定它是否需要对称:
LocalDate.At(LocalTime)
LocalTime.On(LocalDate)
<代码>时间和
OnDate
而不是只在和上进行
?我倾向于选择LocalDate.At(LocalTime),如果必须选择一个符号替代项,因为它遵循其他地方使用的时间层次结构(年、月、日、时、分、秒…)。但是,对于代码可读性而言,LocalTime.On(LocalDate)也很有意义,并且在时间是主要信息(与日期相比)的用例中可能很好。JSR-310使用LocalDate.atTime(LocalTime)@FGreg:use
LocalDate.toLocalDateTime(LocalTime)
。您在哪里看到这种方法?看起来您使用的是java而不是.NET。是的,在java 8中,此方法可用,但不确定其他版本
LocalDate date = ...;
LocalTime time = ...;
LocalDateTime dateTime=date.atTime(time);