【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 ...
随机推荐
- Angular 监听路由变化事件
摘要: $stateChangeStart- 当模板开始解析之前触发 $rootScope.$on('$stateChangeStart', function(event, toState, toPa ...
- win7 ARP 命令运行失败解决办法
直接运行cmd,运行arp -d * ,arp -s会出现下面的错误提示: ARP 项删除失败: 请求的操作需要提升. ARP 项添加失败: 拒绝访问.或提示:ARP 项添加失败: 请求的操作需要提升 ...
- 【Linux】VMware上安装Linux操作系统
Vmware上安装Linux系统 1. 文件菜单选择新建虚拟机 2. 选择经典类型安装,下一步. 3. 选择稍后安装操作系统,下一步. 4. 选择Linux系统,版本选择CentOS 64位. 给虚拟 ...
- Manual close is not allowed over a Spring managed SqlSession(转)
最近用junit测试spring项目的时候,报错: Manual close is not allowed over a Spring managed SqlSession 意思是不允许手动关闭spr ...
- 分享一下自己ios开发笔记
// ********************** 推断数组元素是否为空 ********************** NSString *element = [array objectAtIndex ...
- Git-在一个电脑上同时使用两个Git的账号
前言 又需要登录公司的账号,又想在电脑上使用自己的账号. 实现 首先是git config方面的设置,要取消掉原本对于git账号的全局设置. git config --global --unset u ...
- photoshop cs4 破解
第一步:下载完软件,要先解压出来,有1.55G,解压. 第二步:安装时选试用30天的选项,先不要输入注册码,完成安装. 第三步:找到hosts文件,在C:\WINDOWS\system32\drive ...
- 转在Python中实现PageFactory模式
转自: http://www.cnblogs.com/fnng/p/5092383.html 关于 PageFactory 的概念主要是Java中内置了PageFactory类. import org ...
- 爬虫1:get请求的翻页及思考
刚开始接触爬虫,理解还不透彻,说一些初始阶段的想法{1.因为get请求的方式(请求体无数据,不能通过Request.add_data()函数来添加数据,实现对网址翻页:需要直接对网址进行操作来实现翻页 ...
- MapReduce实现两表的Join--原理及python和java代码实现
用Hive一句话搞定的,可是有时必需要用mapreduce 方法介绍 1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是很常见且很耗时的.而在HADOOP中进行JOIN操作.相同常见且耗时, ...