如何更改DateTime变量的时间?

Sha*_*rix 2 .net vb.net datetime

DateTime和谷歌的新功能真诚地让我失望.我目前正在使用DateTime变量来跟踪游戏中的时间.

问题是,任何改变所述DateTime的尝试都会导致"Property [time]是ReadOnly"错误.任何帮助,工作替代或环形交叉路口将不胜感激.

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
Run Code Online (Sandbox Code Playgroud)

编辑#1;

   Sub IncreaseTime(unit As Integer)
    Dim NewDate As DateTime

    With World.WorldTime
        NewDate = NewDate.AddSeconds(unit)
        .Date = NewDate
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

编辑#2;

图片 镜像2

Ňɏs*_*arp 5

DateTime类型是不可变的 -所有的属性是只读的,所以你不能设置Date,Time或人甚至一个部分(年,分钟等).

由于没有任何属性可以直接设置,更改其中任何一个部分使用其中一个方法AddSeconds(),AddYears()等等.这些都创建并返回一个DateTime具有所需调整的新值.要减去,只需使用负值:

WorldDate = WorldDate.AddMinutes(unit)
' to subtract:
WorldDate = WorldDate.AddMinutes(-unit)
Run Code Online (Sandbox Code Playgroud)

必须将结果分配给新变量或现有变量.

原因很简单:将n分钟可能滚过DayMonth以及其他属性,如DayOfYearDayOfWeek.允许直接访问需要大量检查值是否合法(如.Minutes = 67.Day = 33).

要将日期或时间设置为特定值,请使用一些旧值创建一个新值并指定所需的其他值:

WorldDate  = New DateTime(WorldDate.Year, WorldDate.Month, WorldDate.Day, 
         myHrs, mySecs, myMins)
Run Code Online (Sandbox Code Playgroud)