diff --git a/crates/bindings-csharp/BSATN.Runtime/Builtins.cs b/crates/bindings-csharp/BSATN.Runtime/Builtins.cs index f7122db477e..a3478d18023 100644 --- a/crates/bindings-csharp/BSATN.Runtime/Builtins.cs +++ b/crates/bindings-csharp/BSATN.Runtime/Builtins.cs @@ -432,6 +432,33 @@ public record struct TimeDuration(long Microseconds) : IStructuralReadWrite { public static readonly TimeDuration ZERO = new(0); + /// + /// Returns a that represents a specified number of , accurate to the nearest microsecond. + /// + public static TimeDuration FromMilliseconds(double milliseconds) => + new((long)(milliseconds * 1000L)); + + /// + /// Returns a that represents a specified number of , accurate to the nearest microsecond. + /// + public static TimeDuration FromSeconds(double seconds) => + new((long)(seconds * Util.MicrosecondsPerSecond)); + + /// + /// Returns a that represents a specified number of 60-second . + /// + public static TimeDuration FromMinutes(double minutes) => FromSeconds(minutes * 60); + + /// + /// Returns a that represents a specified number of 60-minute . + /// + public static TimeDuration FromHours(double hours) => FromMinutes(hours * 60); + + /// + /// Returns a that represents a specified number of 24-hour . + /// + public static TimeDuration FromDays(double days) => FromHours(days * 24); + public static implicit operator TimeSpan(TimeDuration d) => new(d.Microseconds * Util.TicksPerMicrosecond);