public static class KsuidExtensions
private static readonly Random RandomGen = new Random();
public static Ksuid GenerateForDateTime(this Ksuid k, DateTime dateTime)
byte[] _payload = new byte[16];
if (dateTime.Kind == DateTimeKind.Utc)
RandomGen.NextBytes(_payload);
DateTimeOffset dto = new DateTimeOffset(dateTime.ToUniversalTime());
var _timestamp = Convert.ToUInt32(dto.ToUnixTimeSeconds() - 1400000000);
return (new Ksuid(_payload, _timestamp));
throw new ArgumentException("The timestamp is not represented in UTC");
public static string GenerateKSUID(this Ksuid k, string dateTime)
if (DateTime.TryParse(dateTime, out DateTime entryDateTime))
DateTime entryUtcDateTime = DateTime.SpecifyKind(entryDateTime, DateTimeKind.Utc);
ksuidStr = k.GenerateForDateTime(entryUtcDateTime).ToString();
public static string GenerateKSUID(string dateTime)
return (new Ksuid()).GenerateKSUID(dateTime);
public static string GenerateKSUID(DateTime dateTime)
return GenerateKSUID(dateTime.ToString());