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);