DateTime 和 google 的新手真的让我失望了。我目前正在使用 DateTime 变量来跟踪游戏中的时间。
问题是,任何更改所述日期时间的尝试都会导致“属性 [时间] 为只读”错误。任何帮助、工作替代方案或迂回方案将不胜感激。
Sub IncreaseTime(unit As Integer)
Dim NewDate As DateTime
With World.WorldTime
NewDate = New DateTime(.Date.Year, .Date.Month, .Date.Day, .Date.Hour, .Date.Minute, .Date.Second + unit)
.Date = NewDate
End With
End Sub
编辑#1;
Sub IncreaseTime(unit As Integer)
Dim NewDate As DateTime
With World.WorldTime
NewDate = NewDate.AddSeconds(unit)
.Date = NewDate
End With
End Sub
编辑#2;
最佳答案
DateTime
类型是不可变 - 所有属性都是只读的,因此您无法设置Date
、Time
甚至其中的一部分(年、分钟等)。
由于没有任何属性可以直接设置,因此要更改某个属性的任何部分,请使用以下方法之一:AddSeconds()
、AddYears()
等。这些都是创建并返回具有所需调整的新 DateTime
值。要减去,只需使用负值:
WorldDate = WorldDate.AddMinutes(unit)
' to subtract:
WorldDate = WorldDate.AddMinutes(-unit)
结果必须分配给新变量或现有变量。
原因非常简单:添加 n 分钟可能会滚动 Day
或 Month
以及其他属性,例如 DayOfYear
或 DayOfWeek
。允许直接访问需要大量检查该值是否合法(例如 .Minutes = 67
或 .Day = 33
)。
要将日期或时间设置为特定值,请使用一些旧值创建一个新值并指定您想要的其他值:
WorldDate = New DateTime(WorldDate.Year, WorldDate.Month, WorldDate.Day,
myHrs, mySecs, myMins)
关于.net - 如何更改 DateTime 变量的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35515817/