1.概要
今天给时间设置唯一索引,发现无法设置成功,后来想用时间戳吧,于是做了这个实验。
2.代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharp时间戳
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("CSharp时间戳");
Program p = new Program();
p.main();
Console.ReadKey();
}
private void main() {
TimestampChange10 timestampChange10 = new TimestampChange10(new GetTimeSpan());
string str10 = timestampChange10.GetTimeStamp();
Console.WriteLine(str10);
Console.WriteLine(timestampChange10.TimeStampToDateTime(long.Parse(str10)).ToString());
TimestampChange13 timestampChange13 = new TimestampChange13(new GetTimeSpanUtc());
string str13 = timestampChange13.GetTimeStamp();
Console.WriteLine(timestampChange13.GetTimeStamp());
Console.WriteLine(timestampChange13.TimeStampToDateTime(long.Parse(str13)).ToString());
}
/// <summary>
/// 获取时间差-接口
/// </summary>
interface IGetTimeSpan
{
TimeSpan getTimeSpan(DateTime dateTime);
}
/// <summary>
/// 时间转换-接口
/// </summary>
interface ITimestampChange {
string GetTimeStamp();
DateTime TimeStampToDateTime(long timeStamp);
}
/// <summary>
/// 时间转换-抽象
/// </summary>
abstract class TimestampChange : ITimestampChange
{
protected DateTime dateTime1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0);
public abstract string GetTimeStamp();
public abstract DateTime TimeStampToDateTime(long timeStamp);
}
/// <summary>
/// 时间差
/// </summary>
class GetTimeSpan : IGetTimeSpan
{
public TimeSpan getTimeSpan(DateTime dateTime)
{
TimeSpan ts = DateTime.Now - dateTime;
return ts;
}
}
/// <summary>
/// 时间差
/// </summary>
class GetTimeSpanUtc : IGetTimeSpan
{
public TimeSpan getTimeSpan(DateTime dateTime)
{
TimeSpan ts = DateTime.UtcNow - dateTime;
return ts;
}
}
/// <summary>
/// 10位时间戳
/// </summary>
class TimestampChange10 : TimestampChange
{
readonly IGetTimeSpan getTimeSpan;
public TimestampChange10(IGetTimeSpan getTimeSpan) {
this.getTimeSpan = getTimeSpan;
}
/// <summary>
/// 时间转化成时间戳
/// </summary>
/// <returns></returns>
public override string GetTimeStamp()
{
return Convert.ToInt64(getTimeSpan.getTimeSpan(dateTime1970).TotalSeconds).ToString();
}
/// <summary>
/// 时间戳转化成时间
/// </summary>
/// <param name="timeStamp"></param>
/// <returns></returns>
public override DateTime TimeStampToDateTime(long timeStamp)
{
return dateTime1970.AddSeconds(timeStamp).ToLocalTime();
}
}
/// <summary>
/// 13位时间戳
/// </summary>
class TimestampChange13 : TimestampChange
{
readonly IGetTimeSpan getTimeSpan;
public TimestampChange13(IGetTimeSpan getTimeSpan)
{
this.getTimeSpan = getTimeSpan;
}
/// <summary>
/// 时间转化成时间戳
/// </summary>
/// <returns></returns>
public override string GetTimeStamp()
{
return Convert.ToInt64(getTimeSpan.getTimeSpan(dateTime1970).TotalMilliseconds).ToString();
}
/// <summary>
/// 时间戳转化成时间
/// </summary>
/// <param name="timeStamp"></param>
/// <returns></returns>
public override DateTime TimeStampToDateTime(long timeStamp)
{
return dateTime1970.AddMilliseconds(timeStamp).ToLocalTime();
}
}
}
}
3.运行效果
4.附记
DateTime.Now 没有 DateTime.UtcNow时间准。