【Unity】Unity中获取网络时间进行每日和每月刷新

news/2024/10/23 5:20:48/

直接上代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class DateChecker : MonoBehaviour
{private DateTime lastCheckedDate; //上次刷新日数据的日期private DateTime lastMonthUtc; //上次刷新月数据的日期TimeSpan NowOffestTime = TimeSpan.Zero;private void Start(){getServerTime();lastCheckedDate = DateTime.Parse(PlayerPrefs.GetString("LASTCHECKDATE", DateTime.MinValue.Date.ToString())); //DateTime.UtcNow.Date;lastMonthUtc = DateTime.Parse(PlayerPrefs.GetString("LASTMONTHDATE", DateTime.MinValue.Date.ToString()));//CheckAndUpdateData();}private void CheckAndUpdateData(){DateTime currentDate = GetNowTime();//DateTime.UtcNow.Date;if (currentDate > lastCheckedDate){PlayerPrefs.SetString("LASTCHECKDATE", currentDate.ToString());UpdateDailyData();lastCheckedDate = currentDate;}if (currentDate.Month > lastMonthUtc.Month || currentDate.Year > lastMonthUtc.Year) //每月刷新{PlayerPrefs.SetString("LASTMONTHDATE", currentDate.ToString());UpdateMonthData();lastMonthUtc = currentDate;}}private void UpdateDailyData(){//在这里写需要每日刷新的数据}private void UpdateMonthData(){//在这里写需要每月刷新的数据}/// <summary>/// 获取实际的网络时间 切系统时间也没用/// </summary>/// <returns></returns>public DateTime GetNowTime(){return DateTime.Now - NowOffestTime;}//获得服务器时间public void getServerTime(){string url = "https://github.com";StartCoroutine(IServerTime(url));}IEnumerator IServerTime(string url){Debug.Log("开始获取“+url+”的服务器时间(GMT DATE)");WWW www = new WWW(url);yield return www;if (www.isDone && string.IsNullOrEmpty(www.error)){Dictionary<string, string> resHeaders = www.responseHeaders;string key = "DATE";string value = null;if (resHeaders != null && resHeaders.ContainsKey(key)){resHeaders.TryGetValue(key, out value);}if (value == null){Debug.Log("DATE is null");yield break;}DateTime Gmt = GMT2Local(value);DateTime now = DateTime.Now;//if (IsNewerHour(now, Gmt)){//记录一下时间差 这就是用户手动改的时间与世界时间的间隔//之后调用GetNowTime()就是准确时间NowOffestTime = now - Gmt;CheckAndUpdateData();}}}/// <summary>/// GMT时间转成本地时间全世界各个时区都会自动转换/// </summary>/// <param name="gmt">字符串形式的GMT时间</param>/// <returns></returns>public DateTime GMT2Local(string gmt){DateTime dt = DateTime.MinValue;try{string pattern = "";if (gmt.IndexOf("+0") != -1){gmt = gmt.Replace("GMT", "");pattern = "ddd, dd MMM yyyy HH':'mm':'ss zzz";}if (gmt.ToUpper().IndexOf("GMT") != -1){pattern = "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'";}if (pattern != ""){dt = DateTime.ParseExact(gmt, pattern, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal);dt = dt.ToLocalTime();}else{dt = Convert.ToDateTime(gmt);}}catch{}return dt;}/// <summary>/// time0:当下的日子/// time1:被比较的日子/// </summary>/// <param name="time0"></param>/// <param name="time1"></param>/// <returns></returns>public static bool IsNewerHour(DateTime time0, DateTime time1){bool isNewer = false;if (time0 > time1){if (time0.Year > time1.Year)isNewer = true;if (time0.Month > time1.Month)isNewer = true;if (time0.Day > time1.Day)isNewer = true;if (time0.Hour > time1.Hour)isNewer = true;}return isNewer;}
}

这个代码是抓取热门网站"https://github.com"的时间,然后解析出来,获取实时的网络时间,可根据自身情况选取其他热门网站(百度、阿里等等)。

根据实时的网络时间,每次登录时,根据时间来刷新游戏中每日和每月需要刷新的数据,直接将代码挂到预制体上就能使用,可根据自身需求进行功能调整~


http://www.ppmy.cn/news/1541239.html

相关文章

玫瑰花HTML源码

HTML源码 <pre id"tiresult" style"font-size: 9px; background-color: #000000; font-weight: bold; padding: 4px 5px; --fs: 9px;"><b style"color:#000000">0010000100000111101110110111100010000100000100001010111111100110…

Kafka原理剖析之「Purgatory(炼狱 | 时间轮)」

一、前言 本文介绍一下Kafka赫赫有名的组件Purgatory&#xff0c;相信做Kafka的朋友或多或少都对其有一定的了解&#xff0c;至少是听过它的名字。那它的作用是什么呢&#xff0c;用来解决什么问题呢&#xff1f;官网confluent早就有文章对其做了阐述 https://cwiki.apache.o…

django开发连接Mysql报错1045或08001问题处理方法

存在问题&#xff1a; django开发过程中&#xff0c;连接mysql数据库一直报错&#xff0c;如下&#xff1a; 或 网上搜索各种解决办法均无效&#xff08;类似加密方式、配置方式等&#xff09; 解决方案&#xff1a; 查看mysql版本&#xff0c;为8.0.26 django开发中&#x…

C#第5讲:类和对象的使用

一、声明类&#xff1a;使用class关键字&#xff0c;类的属性及方法写在{}中。 二、声明属性 属性最常用的书写方法: public int Age {get; set;} 如果属性中具有get关键字&#xff0c;说明可以获取该属性的值。 如果属性中具有set关键字&#xff0c;说明可以向该属性设置值…

PHP unset() 函数的作用

PHP 中的 unset() 函数用于销毁指定的变量。具体来说&#xff0c;它会解除变量名与其数据之间的关联&#xff0c;从而释放该变量所占用的内存。不过需要注意的是&#xff0c;unset() 并不是删除变量的内容&#xff0c;而是取消对变量名的引用。如果变量是数组中的某个元素或者对…

GitLab CVE-2024-6678、CVE-2024-8640 漏洞解决方案

极狐GitLab 近日发布安全补丁版本17.3.2, 17.2.5, 17.1.7&#xff0c;修复了17个安全漏洞&#xff0c;本分分享 CVE-2024-6678、CVE-2024-8640 两个漏洞详情。 极狐GitLab 正式推出面向 GitLab 老旧版本免费用户的专业升级服务&#xff0c;为 GitLab 老旧版本进行专业升级&…

Elasticsearch字段数据类型

1. 前言 ES文档的每个字段都至少有一个数据类型&#xff0c;此类型决定了字段值如何被存储以及检索。例如&#xff0c;字符串类型可以定义为text或者keyword&#xff0c;前者用于全文检索&#xff0c;会经过分词后索引&#xff1b;后者用于精准匹配&#xff0c;值会保持原样被…

APO v0.7.0 更新:日志功能完整版发布!

在 v0.6.0 版本中&#xff0c;APO 发布了基于 ClickHouse 开箱即用的高效日志方案&#xff0c;为用户提供了采集、处理和检索全量日志的基础功能。新版本在此基础上进一步强化了日志处理和检索的能力&#xff0c;提升了用户体验。 支持为不同日志设置不同的解析规则&#xff0…