9

LocalDateとLocalTimeがあり、それらからLocalDateTime構造体を作成したいと思います。次の拡張メソッドが最速だと思いましたが、あいまいな理由で、フィールドlocalTime.TickOfMillisecondは現在のバージョンの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);
    }

アドバイスをいただければ幸いです。

4

3 に答える 3

12

これは、現在の方法よりもはるかに簡単です。単純に+operatorを使用します。

LocalDate date = ...;
LocalTime time = ...;
LocalDateTime dateTime = date + time;
于 2013-02-11T16:49:09.223 に答える
4

LocalDate と LocalTime を組み合わせて LocalDateTime を形成するメソッドがあります

LocalDate date = ...;
LocalTime time = ...;
LocalDateTime dateTime=date.atTime(time);
于 2016-02-18T07:32:42.573 に答える
2

なぜ API に含まれていないのかはわかりません。おそらく、ジョン・スキートがそれに答えることができるでしょう。

2番目の例で行った方法に問題はありませんが、次のtickOfMillisecondように計算できます。

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);

もう 1 つ - おそらく拡張メソッドは、日付と時刻が両方とも同じ暦体系にあることを検証し、それを結果に渡す必要がありますか? ISO以外のカレンダーを使用したことがないので、よくわかりません。

于 2013-02-08T01:49:11.847 に答える