How to validate that one datetime is greater than another
15 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
My class takes two datetimes startTime and endTime as input arguments. I would like to use argument validation to force endTime to be later than startTime, but mustBeGreaterThan does not accept datetimes.
0 Commenti
Risposta accettata
Stephen23
il 17 Mag 2024
Modificato: Stephen23
il 17 Mag 2024
Do NOT convert to low-precision serial date numbers! Avoid deprecated DATENUM !
Argument validation lets you define your own validation function, which makes your task easy (and you get to write exactly the informative error messages that you want to see displayed):
A = datetime(1994,1,1);
B = datetime(2024,1,1);
myfun(A,B)
myfun(B,A)
function myfun(startTime,endTime)
arguments
startTime (1,1) {idt}
endTime (1,1) {idt,ilt(startTime,endTime)}
end
disp('okay!')
end
function idt(x)
assert(isdatetime(x),'Input must be a DATETIME.')
end
function ilt(s,e)
assert(s<e,'End time must be after start time.')
end
5 Commenti
Stephen23
il 17 Mag 2024
Modificato: Stephen23
il 17 Mag 2024
Some changes:
- move the validation functions to local functions (rather than methods),
- do not use the same name for the method and the class,
- define the class object as a method input. This requirement is explained here:
After that (see attached file), it works as expected:
A = datetime(1994,1,1);
B = datetime(2024,1,1);
obj = myClass();
obj.myMethod(A,B)
obj.myMethod(B,A)
Più risposte (2)
Joshua Levin Kurniawan
il 17 Mag 2024
You can use traditional logical operator for datatime. Operator "<", if true, means that the first datatime will occurs sooner than the next variable. In this case, just use the following code
if startTime < endTime
disp("The data is valid");
else
disp("The data is invalid");
end
For further information, you can check out the following page
Fangjun Jiang
il 17 Mag 2024
Modificato: Fangjun Jiang
il 17 Mag 2024
It seems fine in R2022b, R2023b and R2024a
a=now;
b=now;
mustBeGreaterThan(b,a)
mustBeGreaterThan(a,b)
2 Commenti
Fangjun Jiang
il 17 Mag 2024
Modificato: Fangjun Jiang
il 17 Mag 2024
okay, I thought now() returns a datetime object. It was not. You can convert it to datenum()
a=datetime('now');
b=datetime('now');
mustBeGreaterThan(datenum(b),datenum(a))
mustBeGreaterThan(datenum(a),datenum(b))
Vedere anche
Categorie
Scopri di più su Dates and Time in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!