TimeInfo.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System;
  2. namespace ET
  3. {
  4. public class TimeInfo: Singleton<TimeInfo>, ISingletonUpdate
  5. {
  6. private int timeZone;
  7. public int TimeZone
  8. {
  9. get
  10. {
  11. return this.timeZone;
  12. }
  13. set
  14. {
  15. this.timeZone = value;
  16. dt = dt1970.AddHours(TimeZone);
  17. }
  18. }
  19. private DateTime dt1970;
  20. private DateTime dt;
  21. public long ServerMinusClientTime { private get; set; }
  22. public long FrameTime;
  23. public TimeInfo()
  24. {
  25. this.dt1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
  26. this.dt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
  27. this.FrameTime = this.ClientNow();
  28. }
  29. public void Update(int timeMS)
  30. {
  31. this.FrameTime = this.ClientNow();
  32. }
  33. /// <summary>
  34. /// 根据时间戳获取时间
  35. /// </summary>
  36. public DateTime ToDateTime(long timeStamp)
  37. {
  38. return dt.AddTicks(timeStamp * 10000);
  39. }
  40. // 线程安全
  41. public long ClientNow()
  42. {
  43. return (DateTime.UtcNow.Ticks - this.dt1970.Ticks) / 10000;
  44. }
  45. public long ServerNow()
  46. {
  47. return ClientNow() + Instance.ServerMinusClientTime;
  48. }
  49. public long ClientFrameTime()
  50. {
  51. return this.FrameTime;
  52. }
  53. public long ServerFrameTime()
  54. {
  55. return this.FrameTime + Instance.ServerMinusClientTime;
  56. }
  57. public long Transition(DateTime d)
  58. {
  59. return (d.Ticks - dt.Ticks) / 10000;
  60. }
  61. }
  62. }