c# - 如何从 DateTime 生成 guid?

标签 c# datetime

我想从 DateTime 生成一个 Guid v.1。我尝试使用此处描述的类:

https://gist.github.com/nberardi/3759706

但在从 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/

相关文章:

c# - Microsoft Word 中的 SaveCopyAs 行为

javascript - new Date() 适用于 Chrome 但不适用于 Firefox

javascript - 这种日期时间格式有简单的转换吗?

html - 日期时间本地输入不接受指定值

c# - ZeroMQ 上下文破坏导致轮询器 ETERM 但不继续

c# - 如何转换十进制?字符串?

c# - ASP.NET Core 作为 Windows 服务 wwwroot 位置

c# - WPF下载文件并同时保存

ruby-on-rails - Rails : Set config. time_zone 到服务器的时区?

php - CSV 到 Mysql 插入日期时间