首页 > 解决方案 > 在 F# 中分别设置 DateTime 的日期/时间

问题描述

我只想更改 F# 中 System.DateTime 对象的日期和/或时间部分,同时保留现有字段。当我说“更改”时,我的意思是保持不变性,所以我想在操作后接收一个新的 DateTime 对象。

我已经说明了我会如何改变时间,但这似乎是不正确的。

open System

type State = {
  When: DateTime
}

// How would I actually do the following?
// let setTime h m state = { state with When = { state.When with Hour = h; Minute = m } }

理想情况下,该解决方案适用于 .NET Core 和 Framework。

编辑

正如评论中提到的,关于如何更改 DateTime 有一个单独的问题,但这个问题似乎集中在 C#(而不是 F#)以及添加 TimeSpan 上。我想设置字段值(而不是添加到它们)。有一些答案可以复制字段并调用构造函数,但我希望有一个更优雅的解决方案。

标签: .netdatetimetime.net-coref#

解决方案


这是如何在 DateTime 中更改时间的最佳答案?翻译成 F#:

open System

let x = DateTime.Now
let y = x.Date + TimeSpan(10, 30, 0)

在哪里

printfn "%A" x
printfn "%A" y

印刷

10/5/2019 1:49:58 PM
10/5/2019 10:30:00 AM

您可以以类似的方式设置日期部分:

let x = DateTime.Now
let y = DateTime(2015, 03, 15) + x.TimeOfDay

推荐阅读