我想从 DateTime
生成一个 Guid v.1。我尝试使用此处描述的类:
但在从 DateTime
获得 Guid
之后,我尝试使用该 Guid
获得与原始代码相同的 DateTime
,它给了我一个不同的 Guid
。这是我使用的代码:
string uuidString = "9e5713bb-bb4c-11e8-9d6c-12345678df23";
Guid gui = new Guid(uuidString);
DateTime dateTimeFromGuid = GuidGenerator.GetDateTime(gui);
Console.WriteLine(dateTimeFromGuid.ToString("dd/MM/yyyy hh:mm:ss"));
Guid guidFromDateTime = GuidGenerator.GenerateTimeBasedGuid(dateTimeFromGuid);
Console.WriteLine(guidFromDateTime); //7909dbbb-bb33-11e8-9f6a-95d8e90ccf10
如何从 DateTime
取回原始 GUID?
最佳答案
如果你想要一些简单的东西,无论你在什么机器上,都可以来回转换。然后,您可以将日期转换为字节数组并使用它来创建 Guid
。这是非标准的,但会为每个 DateTime
生成完全相同的 Guid
。
var today = new DateTime(2018, 9, 18, 10, 59, 00);
var bytes = BitConverter.GetBytes(today.Ticks);
Array.Resize(ref bytes, 16);
var guid = new Guid(bytes);
Console.WriteLine(guid); //bd02b200-1d55-08d6-0000-000000000000
回到现在。
var dateBytes = guid.ToByteArray();
Array.Resize(ref dateBytes, 8);
var date = new DateTime(BitConverter.ToInt64(dateBytes));
Console.WriteLine(date); //9/18/2018 10:59:00
如果你想使用扩展的话。
class Program
{
static void Main(string[] args)
{
var date = new DateTime(2018, 09, 18, 12, 00, 00);
var guid = date.ToGuid();
Console.WriteLine(guid); // 428a6000-1d5e-08d6-0000-000000000000
var back2date = guid.ToDateTime();
Console.WriteLine(back2date); // 9/18/2018 12:00:00
}
}
public static class DateTimeExtensions
{
public static Guid ToGuid(this DateTime dt)
{
var bytes = BitConverter.GetBytes(dt.Ticks);
Array.Resize(ref bytes, 16);
return new Guid(bytes);
}
}
public static class GuidExtensions
{
public static DateTime ToDateTime(this Guid guid)
{
var bytes = guid.ToByteArray();
Array.Resize(ref bytes, 8);
return new DateTime(BitConverter.ToInt64(bytes));
}
}
关于c# - 如何从 DateTime 生成 guid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52390149/