志在指尖
用双手敲打未来

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

///<summary>
///时间戳ID
///</summary>
publicclassTimestampID
{
privatelong_lastTimestamp;
privatelong_sequence;//计数从零开始
privatereadonlyDateTime?_initialDateTime;
privatestaticTimestampID_timestampID;
privateconstintMAX_END_NUMBER=9999;
privateTimestampID(DateTime?initialDateTime)
{
_initialDateTime=initialDateTime;
}
///<summary>
///获取单个实例对象
///</summary>
///<paramname=”initialDateTime”>最初时间,与当前时间做个相差取时间戳</param>
///<returns></returns>
publicstaticTimestampIDGetInstance(DateTime?initialDateTime=null)
{
if(_timestampID==null)Interlocked.CompareExchange(ref_timestampID,newTimestampID(initialDateTime),null);
return_timestampID;
}
///<summary>
///最初时间,作用时间戳的相差
///</summary>
protectedDateTimeInitialDateTime
{
get
{
if(_initialDateTime==null||_initialDateTime.Value==DateTime.MinValue)returnnewDateTime(1970,1,1,0,0,0,DateTimeKind.Utc);
return_initialDateTime.Value;
}
}
///<summary>
///获取时间戳ID
///</summary>
///<returns></returns>
publicstringGetID()
{
longtemp;
vartimestamp=GetUniqueTimeStamp(_lastTimestamp,outtemp);
return$”{timestamp}{Fill(temp)}”;
}
privatestringFill(longtemp)
{
varnum=temp.ToString();
IList<char>chars=newList<char>();
for(inti=0;i<MAX_END_NUMBER.ToString().Length-num.Length;i++)
{
chars.Add(‘0’);
}
returnnewstring(chars.ToArray())+num;
}
///<summary>
///获取一个时间戳字符串
///</summary>
///<returns></returns>
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;
}
}
///<summary>
///
///</summary>
///<returns></returns>
privatelongGetTimestamp()
{
if(InitialDateTime>=DateTime.Now)thrownewException(“最初时间比当前时间还大,不合理”);
varts=DateTime.UtcNow-InitialDateTime;
return(long)ts.TotalMilliseconds;
}
}

未经允许不得转载:IT技术网站 » C#生成唯一时间戳ID代码分享
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载