【watcher】 #02 c# 中实现时间戳等,日期数字及大概率绝对随机数 实现
在Wacher的项目中,用到了很多时间记录的地方,为了将来能够和在线数据打通,我们使用了时间戳来记录时间信息

由于c# 没有现成的方法,所以我们重新写了一个Helper类来帮助我们使用这些公共函数
同时由于是静态函数,添加引用后我们便可以全局调用了。
1、通过日期获取当前的时间戳
这个时间戳是10位的时间戳,如果需要和JAVA兼容请在除法中取出3位,保存到毫秒级
/// <summary>
/// 获取时间戳
/// </summary>
/// <returns></returns>
public static string GetTimeSecond(DateTime dataTime)
{
return ((dataTime.ToUniversalTime().Ticks - ) / ).ToString();
}
2、通过时间戳获取到DateTime信息
(无论是string还是long类型,方法中价格强制类型转换即可,目前如果传参是long类型的话只需要ToString即可 )
/// <summary>
/// 由时间戳到系统时间
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime ReturnDateTime(string date)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(, , ));
long lTime = long.Parse(date + "");
TimeSpan toNow = new TimeSpan(lTime);
return dtStart.Add(toNow);
}
3、通过DateTime 获取数字类型的日期时间
(通过DateTime即可获得 20180808 类型的数字日期)
/// <summary>
/// 通过datetime格式获取 YMD格式数字类型日期
///
/// </summary>
/// <param name="dataTime"></param>
/// <returns></returns>
public static long GetDateInt(DateTime dataTime)
{
var dateLong= dataTime.ToString("yyyyMMdd");
return Convert.ToInt64(dateLong);
}
4、获取绝对随机字符或绝对随机
单机每秒请求10W次不重复,【在网络请求中,我们经常会用到request_id,服务端,客户端均可使用,实测一秒内10W次请求不重复】
原理:
使用基于计算机本身的识别因子随机数的随机因子+基于GUid的随机因子的随机数+短时间戳+base64进制转化为短字符。
参考资料:https://www.cnblogs.com/linJie1930906722/p/6115917.html
:https://blog.csdn.net/zmq5411/article/details/47322257
/// <summary>
/// 获取绝对随机数
/// </summary>
/// <returns></returns>
public static string GetRandOnlyId()
{
var timeStamp= (DateTime.Now.ToUniversalTime().Ticks - ) / ;// 减少时间戳位数形成新的短时间戳
var beginRand= IntToi64(new Random(GetRandomSeed()).Next(, ));// 基于计算机硬件的随机因子产生随机数
var endRand= IntToi64(new Random(GetGuidSeed()).Next(, ));// 基于Guid随机因子产生的的随机数
var randString = beginRand+ IntToi64(timeStamp)+ endRand;
return randString;
} /// <summary>
/// 获取不重复的随机数种子
/// system.Security.Cryptography.RNGCryptoServiceProvider的类,它采用系统当前的硬件信息、进程信息、线程信息、系统启动时间和当前精确时间作为填充因子,通过更好的算法生成高质量的随机数
/// </summary>
/// <returns></returns>
static int GetRandomSeed()
{
byte[] bytes = new byte[];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(bytes);
return BitConverter.ToInt32(bytes, ); } /// <summary>
/// 通过Guid 获取随机种子
/// </summary>
/// <returns></returns>
static int GetGuidSeed()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
int iSeed = BitConverter.ToInt32(buffer, );
return iSeed;
} /// <summary>
/// 十进制转64进制
/// </summary>
/// <param name="xx"></param>
/// <returns></returns>
public static string IntToi64(long xx)
{
string retStr = "";
while (xx >= )
{
int index = Convert.ToInt16(xx - (xx / ) * );
retStr = Base64Code[index] + retStr;
xx = xx / ;
}
return retStr;
} /// <summary>
/// 64 位转化参数
/// </summary>
private static Dictionary<int, string> Base64Code = new Dictionary<int, string>() {
{ ,"A"}, { ,"B"}, { ,"C"}, { ,"D"}, { ,"E"}, { ,"F"}, { ,"G"}, { ,"H"}, { ,"I"}, { ,"J"},
{ ,"K"}, { ,"L"}, { ,"M"}, { ,"N"}, { ,"O"}, { ,"P"}, { ,"Q"}, { ,"R"}, { ,"S"}, { ,"T"},
{ ,"U"}, { ,"V"}, { ,"W"}, { ,"X"}, { ,"Y"}, { ,"Z"}, { ,"a"}, { ,"b"}, { ,"c"}, { ,"d"},
{ ,"e"}, { ,"f"}, { ,"g"}, { ,"h"}, { ,"i"}, { ,"j"}, { ,"k"}, { ,"l"}, { ,"m"}, { ,"n"},
{ ,"o"}, { ,"p"}, { ,"q"}, { ,"r"}, { ,"s"}, { ,"t"}, { ,"u"}, { ,"v"}, { ,"w"}, { ,"x"},
{ ,"y"}, { ,"z"}, { ,""}, { ,""}, { ,""}, { ,""}, { ,""}, { ,""}, { ,""}, { ,""},
{ ,""}, { ,""}, { ,"+"}, { ,"/"}, };
最后持续更新的 watcher beta 版下载:http://api.bobdong.cn/public/static/Win/Watcher%E5%AE%88%E6%9C%9B%E8%80%85.exe
Github地址:https://github.com/d100000/Watcher
欢迎大家提出建议
【watcher】 #02 c# 中实现时间戳等,日期数字及大概率绝对随机数 实现的更多相关文章
- JS中Unix时间戳转换日期格式
<!doctype html> <html> <head> <title>Unix时间戳转换成日期格式</title> <script ...
- MYSQL中UNIX时间戳与日期的转换
select FROM_UNIXTIME(1464973385.641,'%Y-%m-%d %H:%i:%s'); select UNIX_TIMESTAMP('2016-06-04 01:03:05 ...
- UNIX时间戳与日期的相互转换
mysql中UNIX时间戳与日期的相互转换 UNIX时间戳转换为日期用函数:FROM_UNIXTIME() select FROM_UNIXTIME(1410318106); 日期转换为UNIX时间戳 ...
- js中时间戳与日期转换-js日期操作
常用的一些日期操作. 用js获取一个时间戳. <script type="text/javascript"> var date = new Date();//当前时间 ...
- jQuery中时间戳和日期的相互转换
在项目中经常会使用时间戳和日期的相互转换,可以参考如下代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...
- php中时间戳和日期格式的转换
一,PHP时间戳函数获取指定日期的unix时间戳 strtotime(”2009-1-22″) 示例如下: echo strtotime(”2009-1-22″) 结果:1232553600 说明:返 ...
- 微信小程序中时间戳和日期的相互转换
在微信开发小程序时,后台传入的诗句可能是 时间戳 而不是日期 或者需要把日期转换成时间戳来做出相应的处理时我们将用到时间戳和日期的相互转换微信小程序里, 时间戳转化为日期格式,支持自定义.拷贝至项目 ...
- 【问题记录】MySQL中时间戳转日期格式和Java中时间戳转日期格式偶尔不一致
背景: MySQL的某个字段存放着一些时间戳格式的时间. 问题描述: Java程序将MySQL中的时间戳字段取出来,在Java程序中转成yyyy-MM-dd HH:mm:ss格式的时候,偶尔会出现转化 ...
- Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等。
通过Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中时间范围示意图:可以很清晰的看出ZonedDateTime相当于LocalDateTime+ZoneI ...
随机推荐
- vue - index.html
描述:通过App.vue绑定#App元素(进行展示).div#id中间写入任何内容都会失效. <!DOCTYPE html> <html> <head> <m ...
- 一个.net Cookie组件的bug引发的题外话
在.net里,做过Http模拟发送请求的朋友们应该遇到过,有个时候无论怎么努力,都没办法让Cookie跟网页用浏览器所收集的一样,其中原因除了有些Cookie大概是ReadOnly之外,似乎另有隐情: ...
- mui ajax方法
mui ajax方法详解: mui提供了mui.ajax,在此基础上有分装出mui.get()/mui.getJSON()/mui.post()三个方法. mui.ajax( url [,settin ...
- win7多重网络之默认网关问题
如果有谁做硬件的在用MAC,跟我讲一声好用不好用...有常用软件清单最好.windows已经用的无力吐槽了. 机子上有两块网卡,一块有线一块无线,有线的连接内部网络,无线连接外部网络, 问题描述: 内 ...
- eclipse下的tomcat内存设置大小(转)
步骤: 1.点击Run 2.选择Run Configurations, 3.系统弹出设置tomcat配置页面,在Argument中末尾添加参数中的VM arguments中追加: -Xms256M - ...
- ssh2 三大框架整合
提示:eclipse环境.工程环境.tomcat环境的jdk保持一致 1.新建一个工程,把工程的编码为utf-8 2.把jsp的编码形式改成utf-8 3.把jar包放入到lib下 ...
- Codeigniter 使用 Mysql 存储过程
本篇文章由:http://xinpure.com/codeigniter-using-mysql-stored-procedures/ 执行存储过程 $query = $this -> db - ...
- Linux 定时任务命令Crontab参数详解
http://xshell.net/linux/crontab.html 实战: * */1 * * * /usr/local/etc/rc.d/lighttpd restart 每一小时重启 ...
- bootstrap学习笔记一 登录水平表单
先上效果图: 样式定义: <form class="form-horizontal"> <div class="control-group"& ...
- Ffmpeg 视频教程 向视频中添加文字
Ffmpeg支持添加文字功能,具体如何将文字叠加到视频中的每一张图片,FFmpeg调用了文字库FreeSerif.ttf.当我们 用到ffmpeg 添加文字功能时 我们需要先下载改文字库,下载地址是h ...