生成唯一时间戳ID代码分享

IT技术2年前 (2022)更新 投稿用户
0

///

///时刻戳ID
///
publicclassTimestampID
{
privatelong_lastTimestamp;
privatelong_sequence;//计数从零开始
privatereadonlyDateTime?_initialDateTime;
privatestaticTimestampID_timestampID;
privateconstintMAX_END_NUMBER=9999;
privateTimestampID(DateTime?initialDateTime)

C#


{
_initialDateTime=initialDateTime;
}
///
///获取单个实例对象
///
///开始时刻,与当前时刻做个相差取时刻戳
///
publicstaticTimestampIDGetInstance(DateTime?initialDateTime=null)
{
if(_timestampID==null)Interlocked.CompareExchange(ref_timestampID,newTimestampID(initialDateTime),null);
return_timestampID;
}
///
///开始时刻,作用时刻戳的相差
///
protectedDateTimeInitialDateTime
{
get
{
if(_initialDateTime==null||_initialDateTime.Value==DateTime.MinValue)returnnewDateTime(1970,1,1,0,0,0,DateTimeKind.Utc);
return_initialDateTime.Value;
}
}
///
///获取时刻戳ID
///
///
publicstringGetID()
{
longtemp;
vartimestamp=GetUniqueTimeStamp(_lastTimestamp,outtemp);
return$”{timestamp}{Fill(temp)}”;
}
privatestringFill(longtemp)
{
varnum=temp.ToString();
IListchars=newList();
for(inti=0;i<MAX_END_NUMBER.ToString().Length-num.Length;i++)
{
chars.Add(‘0’);
}
returnnewstring(chars.ToArray())+num;
}
///
///获取一个时刻戳字符串
///
///
publiclongGetUniqueTimeStamp(longlastTimeStamp,outlongtemp)
{
lock(this)
{
temp=1;
vartimeStamp=GetTimestamp();
if(timeStamp==_lastTimestamp)
{
_sequence=_sequence+1;
temp=_sequence;
if(temp>=MAX_END_NUMBER)
{
timeStamp=GetTimestamp();
_lastTimestamp=timeStamp;
temp=_sequence=1;
}
}
else
{
_sequence=1;
_lastTimestamp=timeStamp;
}
returntimeStamp;
}
}
///
///
///
///
privatelongGetTimestamp()
{
if(InitialDateTime>=DateTime.Now)thrownewException(“开始时刻比当前时刻还大,不合理”);
varts=DateTime.UtcNow-InitialDateTime;
return(long)ts.TotalMilliseconds;
}
}

© 版权声明
好牛新坐标 广告
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章