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

阿猿啊 2020/6/28 16:26:30

///  ///时刻戳ID  ///  publicclassTimestampID  {  privatelong_lastTimestamp;  privatelong_sequence;//计数从零开始  privatereadonlyDateTime?_initialDateTime;  privatestaticTimestampID_timestampID;  privateconstintMAX_END_NUMBER=9999;…

  ///
  ///时刻戳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;
  }
  }

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[C#生成唯一时间戳ID代码分享]http://www.zyiz.net/tech/detail-141290.html

上一篇:C# 9.0 终于来了, Top-level programs 和 Partial Methods 两大新特性探究

下一篇:【asp.net core 系列】14 .net core 中的IOC

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程