特定のタイムゾーンで、LocalDateの最後の可能な瞬間を見つける最も簡単な方法は何ですか?

ベンジェンキンソン

これが単純な質問のように思われる場合はお詫びしますが、私が持っている解決策がすべての場合に最も賢明であるかどうかを確認したいだけです。

使用する既存のSQLServerデータベースには、「期間」が包括的開始->包括的終了UTCDateTime値として格納されます。(開始列と終了列はどちらもdatetime2(7)作業を開始する前System.DateTimeインスタンスに自動的に変換されますDateTimeKind.UTC)。

したがって、「ユーザーのタイムゾーンを指定して、1日/月/年全体」を保存する必要がある場合は、「特定のDateTimeZoneで指定されたLocalDateの最後の可能な瞬間」を見つける必要があります

私が持っている方法は次のとおりです。

public static LocalDateTime AtEndOfDay(this LocalDate localDate)
{
    return localDate
        .PlusDays(1)
        .AtMidnight()
        .PlusTicks(-1);
}

public static ZonedDateTime AtEndOfDay(this DateTimeZone zone, LocalDate localDate)
{
    return zone
        .AtStartOfDay(localDate.PlusDays(1))
        .Plus(Duration.FromTicks(-1));
}

23:59:59.9999999が「スキップ」され、ターゲット存在しない場合、次の利用可能なインスタントにマップされるため、LocalDateTimeを使用し.AtLeniently(..)「日付の終わり」を(他の場所で)マッピングすることも避ける必要があると思います。DateTimeZoneギャップ00:00:00.000000の「外側」側これにより、排他的な ZonedDateTimeが得られます。

修正された方法:

public static LocalDateTime AtEndOfDay(this LocalDate localDate)
{
    // TODO: Replace with localDate.At(LocalTime.MaxValue) when NodaTime 2.0 is released.
    return localDate
        .PlusDays(1)
        .AtMidnight()
        .PlusTicks(-1);
}

public static ZonedDateTime AtEndOfDay(this DateTimeZone zone, LocalDate localDate)
{
    return zone
        .AtStartOfDay(localDate.PlusDays(1))
        .Plus(-Duration.Epsilon);
}

public static ZonedDateTime AtEndOfDayInZone(this LocalDate localDate, DateTimeZone zone)
{
    return zone.AtEndOfDay(localDate);
}
ジョンスキート

まず、コメントに記載されているように、排他的な上限で作業できるときはいつでも、それは良い考えです:)

代わりにAtEndOfDay使用することを除いて、あなたの方法は私には合理的に見えます。特に、Noda Time 2.0では、ティックではなくナノ秒の精度に移行します。どちらの場合もあなたが望むことをします。Duration.EpsilonDuration.FromTicksDuration.Epsilon

あなたのLocalDate解決策では、表現可能な最大のLocalTime.MaxValue(またはEndOfDayが欠落しているように思われますLocalTimeそれが利用可能であれば、次のように書くことができます。

return date.At(LocalTime.MaxValue);

これにより、以前と同じ「ティック」の問題が解消されます。2.0用にそれを追加することを忘れないようにします-「レガシーシステムによって強制された場合にのみこれを使用する」という効果へのコメントで文書化されますが:)

1日を加算してからティック(またはナノ秒)を減算することの1つの欠点は、で失敗することLocalDate.MaxValueです。これはおそらく実用的な問題ではありませんが、Noda Time自体のコードでは、そのようなことは避けようとしています。ZonedDateTimeそれはかなり複雑なシナリオなので、私はバージョンではそれを避けようとはしません(おそらくそれを行う方法はありますが、それだけの価値はありません。)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

データベーステーブルから特定の値を見つけるための最も簡単で最適な方法は何ですか?

Pythonで特定の文字が最後に出現した後、文字列の文字を見つける最も簡単な方法は何ですか?

値間の一致を見つける最も簡単な方法は何ですか

未使用のローカルポートを見つける最も簡単な方法は何ですか?

Matlab警告のメッセージIDを見つける最も簡単な方法は何ですか?

特定の列がデータフレームの最後(または最初)にあることを確認する最も簡単な方法は何ですか

画像内のオブジェクトの座標を見つける最も簡単な方法は何ですか?

jpegの暗いピクセルの数を見つける「最も簡単な」方法は何ですか?

jpegの暗いピクセルの数を見つける「最も簡単な」方法は何ですか?

直接通信できないマシン間でユニゾンプロファイルの同期を維持する最も簡単な方法は何ですか

特定のパターンをzgrepする最も簡単な方法は何ですか?

次数10 ^ 5の完全グラフのEMSTを見つけるための最も単純で最も簡単なアルゴリズムは何ですか

2つのデータフレームを排他インデックスでマージする最も簡単な方法は何ですか?

パンダ:列の値でスペースと異常な文字を見つける最も簡単な方法は何ですか?

2つのパンダデータフレーム間で部分的な文字列の一致を見つける最も簡単な方法

特定の場所でインデックスを見つけるための最も簡単で計算効率の高い方法は何ですか?

Rを使用して配列内の値の90%を含む最小の間隔を見つける最も簡単な方法は何ですか?

2つのリストの間に交差点があることを見つける最も簡単な方法は何ですか?

SlackチームIDとチャネルIDを見つける最も簡単な方法は何ですか?

一般的な最初/最後の文字を持つ文字列の最長のチェーンを見つける最も速い方法は何ですか?

Jackson ObjectMapperのインデント間隔を設定する最も簡単な方法は何ですか?

中央のボタンの横にアイコンを配置する最も簡単な方法は何ですか?

2つのタイムゾーンのScala / Javaの間のオフセットを計算するための最も簡単な方法

リスト付きの6つの変数からランダムなアイテムを選択する最も簡単な方法は何ですか

Dockerコンテナーのクラスターを生成する最も簡単な方法は何ですか?

pd.append()は、2つのデータフレームを結合する最も簡単な方法ですか?

HTMLファイルから2つの特定のフィールドの値を出力する最も簡単な方法は何ですか?

複数のiOSデバイスとAndroidデバイス間でデータベースの同期を維持する最も簡単な方法は何ですか?

Javaで、ランダムな英数字の文字列を作成する最も簡単な方法は何ですか?

TOP 一覧

  1. 1

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  2. 2

    ソートされた検索、ターゲット値未満の数をカウント

  3. 3

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    Ansibleで複数行のシェルスクリプトを実行する方法

  6. 6

    Reactでclsxを使用する方法

  7. 7

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  8. 8

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  9. 9

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  10. 10

    PowerShellの分割ファイルへのヘッダーの追加

  11. 11

    Chromeウェブアプリのウェブビューの高さの問題

  12. 12

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  13. 13

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  14. 14

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  15. 15

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  16. 16

    MLでのデータ前処理の背後にある直感

  17. 17

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  20. 20

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  21. 21

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

ホットタグ

アーカイブ