IdGenerator icon indicating copy to clipboard operation
IdGenerator copied to clipboard

怎么通过生成的long型id解析得到生成时的时间

Open ZUOXIANGE opened this issue 3 years ago • 8 comments

希望增加一个parseId的方法,能解析出生成这个id时的参数

ZUOXIANGE avatar Aug 09 '21 11:08 ZUOXIANGE

提议可接受,近期安排,先从哪门语言开始?

yitter avatar Aug 10 '21 06:08 yitter

ID 的组成 = 时间序列+WorkerId+SeqNumber。 转成二进制后,右移 (WorkerIdBitLength+SeqBitLength)位数,就可得到时间戳(毫秒单位),将BaseTime加上此时间戳就是ID的生成时间(如:2021-08-10 12:34:56 789).

yitter avatar Aug 10 '21 06:08 yitter

明白了,静待更新

ZUOXIANGE avatar Aug 11 '21 01:08 ZUOXIANGE

PHP目录下的split.php文件有反解的逻辑,可以参考

amuluowin avatar Sep 15 '21 11:09 amuluowin

以下是C#写的获取时间写法

//通过雪花算法ID获取时间戳
        static DateTime GetTime() {

            var Id = YitIdHelper.NextId();

            var Id2Str = Convert.ToString(Id, 2);
            var TimeStr = Id2Str.Substring(0, Id2Str.Length- Opt.WorkerIdBitLength-Opt.SeqBitLength);

            var dt = Opt.BaseTime.AddMilliseconds(Convert.ToInt64(TimeStr, 2)).ToLocalTime();

            return dt;
        }

bao2314483 avatar Sep 26 '21 02:09 bao2314483

大家玩的这么高级了

wzcode avatar Dec 19 '21 12:12 wzcode

这个方法我怎反解析不出来

wzcode avatar Dec 19 '21 12:12 wzcode

大家没有问题的话,这个问题就 关闭了。

yitter avatar Aug 11 '22 08:08 yitter