在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# 中实现时间戳等,日期数字及大概率绝对随机数 实现的更多相关文章

  1. JS中Unix时间戳转换日期格式

    <!doctype html> <html> <head> <title>Unix时间戳转换成日期格式</title> <script ...

  2. MYSQL中UNIX时间戳与日期的转换

    select FROM_UNIXTIME(1464973385.641,'%Y-%m-%d %H:%i:%s'); select UNIX_TIMESTAMP('2016-06-04 01:03:05 ...

  3. UNIX时间戳与日期的相互转换

    mysql中UNIX时间戳与日期的相互转换 UNIX时间戳转换为日期用函数:FROM_UNIXTIME() select FROM_UNIXTIME(1410318106); 日期转换为UNIX时间戳 ...

  4. js中时间戳与日期转换-js日期操作

    常用的一些日期操作. 用js获取一个时间戳. <script type="text/javascript"> var date = new Date();//当前时间 ...

  5. 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 ...

  6. php中时间戳和日期格式的转换

    一,PHP时间戳函数获取指定日期的unix时间戳 strtotime(”2009-1-22″) 示例如下: echo strtotime(”2009-1-22″) 结果:1232553600 说明:返 ...

  7. 微信小程序中时间戳和日期的相互转换

    在微信开发小程序时,后台传入的诗句可能是 时间戳 而不是日期  或者需要把日期转换成时间戳来做出相应的处理时我们将用到时间戳和日期的相互转换微信小程序里, 时间戳转化为日期格式,支持自定义.拷贝至项目 ...

  8. 【问题记录】MySQL中时间戳转日期格式和Java中时间戳转日期格式偶尔不一致

    背景: MySQL的某个字段存放着一些时间戳格式的时间. 问题描述: Java程序将MySQL中的时间戳字段取出来,在Java程序中转成yyyy-MM-dd HH:mm:ss格式的时候,偶尔会出现转化 ...

  9. Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等。

    通过Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中时间范围示意图:可以很清晰的看出ZonedDateTime相当于LocalDateTime+ZoneI ...

随机推荐

  1. 解复用-mpeg2

    http://blog.csdn.net/yipie/article/details/7612226 数字高清晰度电视(High Definition Television)简称HDTV,是继黑白电视 ...

  2. 视频质量评价方法:VQM

    如何确定一个视频质量的好坏一直以来都是个棘手的问题.目前常用的方法就是通过人眼来直接观看,但是由于人眼的主观性及观看人员的单体差异性,对于同样的视频质量,不同的人的感受是不一样的.为此多个研究机构提出 ...

  3. Java创建和读取Json

    在Java中构造和解析JSON我用的是org.json,附件为相应的org.json.jar. 下面是两个函数,一个是创建JSON,一个是从文本构造JSON并解析之. 创建json: //constr ...

  4. Unity AssetServer小笔记

    普及一下Asset Server知识: Unity的Asset Server,其实就是一个纯PostgreSQL数据库.Unity操作Asset Server,就是一个数据库客户端操作,但是Unity ...

  5. 算法笔记_085:蓝桥杯练习 9-3摩尔斯电码(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 摩尔斯电码破译.类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文.请不要使用"zylib.h",只能使用 ...

  6. CAS 与 无锁队列

    http://coolshell.cn/articles/8239.html http://www.tuicool.com/articles/VZ3IBv http://blog.csdn.net/r ...

  7. Hibernate映射set与List

    1.对于set类型,如果集合中的元素是简单地类型,如字符串型,set使用另外一种映射方式: team类: import java.util.HashSet; import java.util.Set; ...

  8. struts result动态结果集 带参数的结果集

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC     &qu ...

  9. memcache概念浅谈及名称混乱之区分

    关于memcache这个现在应用广泛的组件,大大提高的网站的响应速度,也方便了程序开发缓存的应用.但是目前针对memcache,网上的资料 大同小异,尤其基于LAMP的网站居多,php/pcel又有两 ...

  10. Java服务CPU占用高问题定位方法

    1. 概述 提供一种简单的方法来定位CPU高的问题. 找到CPU高的进程,比如232543: 执行top -H -p pid,找到占用CPU最高的线程号,比如232544,转换成16进制38c60: ...