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());
}
///
/// 获取时间差-接口
///
interface IGetTimeSpan
{
TimeSpan getTimeSpan(DateTime dateTime);
}
///
/// 时间转换-接口
///
interface ITimestampChange {
string GetTimeStamp();
DateTime TimeStampToDateTime(long timeStamp);
}
///
/// 时间转换-抽象
///
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);
}
///
/// 时间差
///
class GetTimeSpan : IGetTimeSpan
{
public TimeSpan getTimeSpan(DateTime dateTime)
{
TimeSpan ts = DateTime.Now - dateTime;
return ts;
}
}
///
/// 时间差
///
class GetTimeSpanUtc : IGetTimeSpan
{
public TimeSpan getTimeSpan(DateTime dateTime)
{
TimeSpan ts = DateTime.UtcNow - dateTime;
return ts;
}
}
///
/// 10位时间戳
///
class TimestampChange10 : TimestampChange
{
readonly IGetTimeSpan getTimeSpan;
public TimestampChange10(IGetTimeSpan getTimeSpan) {
this.getTimeSpan = getTimeSpan;
}
///
/// 时间转化成时间戳
///
///
public override string GetTimeStamp()
{
return Convert.ToInt64(getTimeSpan.getTimeSpan(dateTime1970).TotalSeconds).ToString();
}
///
/// 时间戳转化成时间
///
///
///
public override DateTime TimeStampToDateTime(long timeStamp)
{
return dateTime1970.AddSeconds(timeStamp).ToLocalTime();
}
}
///
/// 13位时间戳
///
class TimestampChange13 : TimestampChange
{
readonly IGetTimeSpan getTimeSpan;
public TimestampChange13(IGetTimeSpan getTimeSpan)
{
this.getTimeSpan = getTimeSpan;
}
///
/// 时间转化成时间戳
///
///
public override string GetTimeStamp()
{
return Convert.ToInt64(getTimeSpan.getTimeSpan(dateTime1970).TotalMilliseconds).ToString();
}
///
/// 时间戳转化成时间
///
///
///
public override DateTime TimeStampToDateTime(long timeStamp)
{
return dateTime1970.AddMilliseconds(timeStamp).ToLocalTime();
}
}
}
}
3.运行效果
4.附记
DateTime.Now 没有 DateTime.UtcNow时间准。



