using System; using System.Globalization; using System.Threading; namespace ZeroLevel.Services { /// /// Предоставляет различные варианты генерации идентификаторов /// public static class IdGenerator { /// /// Возвращает функцию для получения последовательных значений int64 /// public static Func IncreasingSequenceIdGenerator() { long id = 0; return new Func(() => Interlocked.Increment(ref id)); } /// /// Создает Base64 хэш от указанного даты/времени /// public static string HashFromDateTime(DateTime date) { var bytes = BitConverter.GetBytes(date.Ticks); return Convert.ToBase64String(bytes) .Replace('+', '_') .Replace('/', '-') .TrimEnd('='); } /// /// Создает Base64 хэш от текущего даты/времени /// public static string HashFromCurrentDateTime() { return HashFromDateTime(DateTime.Now); } /// /// Возвращает хэш в виде строки от 32-хбитного значения хэша указанного даты/времени /// public static string ShortHashFromDateTime(DateTime date) { return date.ToString(CultureInfo.InvariantCulture).GetHashCode().ToString("x"); } /// /// Возвращает хэш в виде строки от 32-хбитного значения хэша текущего даты/времени /// public static string ShortHashFromCurrentDateTime() { return DateTime.Now.ToString(CultureInfo.InvariantCulture).GetHashCode().ToString("x"); } /// /// Создает временную отметку из текущей даты/времени /// public static string CreateTimestamp() { return DateTime.Now.ToString("yyyyMMddHHmmssFFF"); } /// /// Создает временную отметку из указанной даты/времени /// public static string CreateTimestamp(DateTime date) { return date.ToString("yyyyMMddHHmmssFFF"); } } }