【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 ...
随机推荐
- 今天科普一下 iOS马甲包审核以及常见审核问题
一.什么是马甲包 马甲包是利用App store 规则漏洞,通过技术手段,多次上架同一款产品的方法.马甲包和主产品包拥有同样的内容和功能,除了icon和应用名称不能完全一致,其他基本一致. 二. ...
- java集合Collection接口
collection集合 Map集合 Hashtable和HashMap的区别: Hashtable的方法是同步的,而HashMap的方法不是.HashMap可以将空值作为一个表的条目的key或val ...
- js实现回放拖拽轨迹-------Day48
今天有点小高兴,csdn博客浏览量过万了,在过去还从来没有过这么高的浏览量呢.不得不说.太多时候还是有些矫情.可看到这些鼓舞还是忍不住高兴啊,至少,这样让我有一种行内人员的感觉,吾道不孤啊. 闲话不多 ...
- RandomForest&ROC
# -*- coding: utf-8 -*- # __author__ = 'JieYao' from biocluster.agent import Agent from biocluster.t ...
- Ubuntu 如何切换到root账户
root账号问题 ubuntu默认禁用了root账号,所以当年试图使用su root命令切换到root用户时,尽管你已经输入了正确的密码,终端依旧会提示你密码错误.你需要执行以下命令解除root账号的 ...
- jboss部署web应用
http://liufei-fir.iteye.com/blog/759772初次部署jboss的web应用,把tomcat/weblogic下的工程移植到jboss上发布 一.修改JBOSS应用服务 ...
- 【HDOJ 5379】 Mahjong tree
[HDOJ 5379] Mahjong tree 往一颗树上标号 要求同一父亲节点的节点们标号连续 同一子树的节点们标号连续 问一共同拥有几种标法 画了一画 发现标号有二叉树的感觉 初始标号1~n 根 ...
- Lintcode---二叉树的最大深度
给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的距离. 您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的 ...
- sql server中Join有几种
JOIN: 如果表中有至少一个匹配,则返回行 (也就是 inner join)LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有 ...
- java启动参数 设置
JAVA_MEM_OPTS="" BITS=`java -version 2>&1 | grep -i 64-bit` if [ -n "$BITS&quo ...