NetworkTime.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using UnityEngine.Networking;
  3. using System.Threading.Tasks;
  4. using Fort23.UTool;
  5. namespace Fort23.Core
  6. {
  7. public static class NetworkTime
  8. {
  9. // 百度服务器时间(通过 HTTP Date 头)
  10. private static readonly string BaiduUrl = "https://www.baidu.com";
  11. public static async Task<DateTime?> GetNetworkTimeAsync()
  12. {
  13. try
  14. {
  15. using var www = UnityWebRequest.Head(BaiduUrl);
  16. www.timeout = 5;
  17. var operation = www.SendWebRequest();
  18. while (!operation.isDone)
  19. await Task.Yield();
  20. if (www.result == UnityWebRequest.Result.Success)
  21. {
  22. string dateHeader = www.GetResponseHeader("Date");
  23. if (!string.IsNullOrEmpty(dateHeader))
  24. {
  25. // 解析 RFC 1123 格式的时间字符串
  26. if (DateTime.TryParse(dateHeader, null, System.Globalization.DateTimeStyles.AssumeUniversal, out DateTime serverTime))
  27. {
  28. var utcTime = serverTime.ToUniversalTime();
  29. LogTool.Log($"百度服务器时间: {utcTime:yyyy-MM-dd HH:mm:ss} UTC");
  30. return utcTime;
  31. }
  32. }
  33. }
  34. else
  35. {
  36. LogTool.Error($"请求百度失败: {www.error}");
  37. }
  38. }
  39. catch (Exception e)
  40. {
  41. LogTool.Error($"[NetworkTime]异常: {e.Message}");
  42. }
  43. LogTool.Error("[NetworkTime]获取百度时间失败");
  44. return null;
  45. }
  46. }
  47. }