Unity3D获得服务器时间/网络时间/后端时间/ServerTime,适合单机游戏使用

说明

一些游戏开发者在做单机游戏功能时(例如:每日奖励、签到等),可能会需要获得服务端标准时间,用于游戏功能的逻辑处理。

问题分析

1、自己如果有服务器:自定义一个后端API,客户端按需请求就行了;
2、如果没有服务器(本篇文章主要讲解的内容):

a、可以使用别人的免费API,但是通常问题比较多,例如:服务器关闭了、API禁用了等(该方案有风险);
b、更稳妥点的方案:请求大厂服务器(例如:百度、腾讯、Github等),获取其响应头时间;

那么,我们应该选择稳妥一点的方案:b。
通过抓包工具,我们抓一下网络请求,分析一下响应头,如下图:
在这里插入图片描述
通过上图可知,我们只需要正常请求大厂的最常用的URL,等待响应成功后,读取响应头中的“Date”属性就行了。

代码实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class TestDate : MonoBehaviour
{
    TimeSpan NowOffestTime=TimeSpan.Zero;
	void Start ()
	{
		getServerTime ();
	}
    /// <summary>
    /// 获取实际的网络时间 切系统时间也没用
    /// </summary>
    /// <returns></returns>
    public static 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;
                Debug.LogError($"本地时间: {Gmt}");
                Debug.LogError($"GMT转化本地时间: {Gmt}");
                Debug.LogError($"GMT时间: {(value)}");
                if (IsNewerHour(now,Gmt))//只要用户调的时间差在一个小时内都能接受
                {
                   //记录一下时间差 这就是用户手动改的时间与世界时间的间隔
                   //之后调用GetNowTime()就是准确时间
                    NowOffestTime= now-Gmt ;
                }
		}
	}

	/// <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;
        }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/675206.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

揭秘App推广新秘诀:Xinstall助你轻松触达海量用户

随着互联网的快速发展&#xff0c;App市场竞争日益激烈&#xff0c;如何在众多的App中脱颖而出&#xff0c;成为企业关注的焦点。然而&#xff0c;随着流量红利的衰退&#xff0c;传统的推广方式已经无法满足企业的需求。在这个关键时刻&#xff0c;Xinstall作为一款专业的App推…

第二篇 多路数据选择器

实验二 多路数据选择器 2.1 实验目的 理解多路数据选择器的概念&#xff1b; 使用门级结构描述实现多路选择器&#xff1b; 使用行为描述实现多路选择器&#xff1b; 完成实验设计、仿真&#xff0c;并在DE1-SOC上验证电路。 2.2 原理介绍 在多路数据传送过程中&#xf…

黑马微服务实用篇知识梳理

1、微服务治理 1.1服务注册与发现Eureka和Nacos a、nacos和eureka&#xff0c;二者都支持服务注册与发现&#xff0c;但nacos还包括了动态配置管理、服务健康监测、动态路由等功能&#xff0c;是更全面的服务管理平台 b、eureka需要独立部署为服务并运行&#xff0c;需要自行搭…

elementUI - 折叠以及多选的组件

//子组件 <template><!-- 左侧第二个 --><div class"left-second-more"><div class"layer-list-wrapper1"><el-collapse v-model"activeNames" change"handleChange"><el-collapse-item v-for"…

分享一个比较好用的在线串口调试助手

web在线调试助手 链接地址如下&#xff1a; 在线串口调试在线串口调试助手 Online serial port debugging assistanthttps://www.bbaiot.com/

QT treeWidget如何添加虚线

1、添加以下代码即可&#xff1a; ui.treeWidget->setStyle(QStyleFactory::create("windows"));2、效果如下&#xff1a;

文件夹加密软件哪个好用?文件加密的4个必备方法(2024)

如果您的电脑上有重要的个人或商业内容&#xff08;例如知识产权&#xff09;&#xff0c;您可能想知道如何确保数据的安全。如果笔记本电脑丢失或被盗&#xff0c;他人可能会访问硬盘驱动器的内容&#xff0c;从而获取到您的个人隐私信息。因此&#xff0c;通过文件夹加密软件…

LLM主要类别架构

LLM主要类别架构介绍 LLM主要类别 LLM本身基于transformer架构。自2017年&#xff0c;attention is all you need诞生起&#xff0c;transformer模型为不同领域的模型提供了灵感和启发。基于原始的Transformer框架&#xff0c;衍生出了一系列模型&#xff0c;一些模型仅仅使用e…

【YOLOv5进阶】——模型结构与模型原理YOLOv5源码解析

一、基础知识 1、backbone backbone是核心组成部分&#xff0c;主要负责提取图像特征。具体来说&#xff0c;backbone通过一系列的卷积层和池化层对输入图像进行处理&#xff0c;逐渐降低特征图的尺寸同时增加通道数&#xff0c;从而保留和提取图像中重要的特征。这些提取出的…

标准发布 | 废水处理减污降碳协同评估指南(碳中和标准)

本文件主编单位&#xff1a;北京林业大学、北京交通大学、中国电建集团华东勘测设计研究院有限公司、 眉山市城投中恒能环保科技有限公司、 中华环保联合会水环境治理专业委员会。 本文件参编单位&#xff1a;中国市政工程中南设计研究总院有限公司、湖北君集环境科技股份有 公…

新型的余热回收系统为印染行业的节能减排助力

上海国际纺织机械展会上,一款新型的余热回收系统引起了印染界大佬们的关注。我国是纺织大国,纺织行业是我国的重要支柱产业。作为传统的能耗大户,印染行业能源消耗占非常高,尤其是定型机能耗。在能源价格不断上涨和环保要求日益严格的背景下,降低定型机能耗、提高能源利用效率成…

【Spring Cloud Alibaba】服务注册与发现+远程调用

目录 注册微服务到Nacos&#xff08;服务提供者&#xff09;创建项目修改依赖信息添加启动注解添加配置信息启动服务&#xff0c;Nacos控制台查看服务列表 注册微服务到Nacos&#xff08;服务消费者&#xff09;创建项目添加依赖信息添加启动注解添加配置信息启动服务&#xff…

学生信息管理系统C++

设计目的 使学生进一步理解和掌握课堂上所学的面向对象C编程知识&#xff0c;巩固和加深学生对C面向对象课程的基本知识的理解和掌握。掌握C面向对象编程和程序调试的基本技能&#xff0c;学会利用C语言进行基本的软件设计&#xff0c;着重提高运用C面向对象语言解决实际问题的…

生成式 AI——ChatGPT、Dall-E、Midjourney 等算法理念探讨

1.概述 艺术、交流以及我们对现实世界的认知正在迅速地转变。如果我们回顾人类创新的历史&#xff0c;我们可能会认为轮子的发明或电的发现是巨大的飞跃。今天&#xff0c;一场新的革命正在发生——弥合人类创造力和机器计算之间的鸿沟。这正是生成式人工智能。 生成模型正在模…

【遂愿赠书 - 1期】:安恒“网安三剑客”-大模型时代下的网络安全实战指南

文章目录 一、图书背景二、网安实战宝典2.1《内网渗透技术》2.2《渗透测试技术》2.3《Web应用安全》 三、校企合作&#xff0c;产学研结合四、大模型时代的数字安全五、 网络安全无小事 一、图书背景 大模型风潮已掀起&#xff0c;各大巨头争相入局&#xff0c;从ChatGPT到Sor…

研学活动报名收集材料怎么写?教程来了!

研学活动作为学校教育的重要组成部分&#xff0c;不仅能够拓宽学生的视野&#xff0c;还能促进家校沟通。学生们报名还是十分积极踊跃的&#xff0c;然而研学活动报名收集材料该怎么写却困扰着不少老师&#xff0c;其实只需要把姓名和联系方式等收集全就可以了&#xff0c;主要…

Go Modules 使用

文章参考https://blog.csdn.net/wohu1104/article/details/110505489 不使用Go Modules&#xff0c;所有的依赖包都是存放在 GOPATH /pkg下&#xff0c;没有版本控制。如果 package 没有做到完全的向前兼容&#xff0c;会导致多个项目无法运行(包版本需求不同)。 于是推出了g…

遥感卫星影像处理流程

当空中的遥感卫星获取了地球数字影像&#xff0c;并传回地面&#xff0c;是否工作就结束了&#xff1f;答案显然是否定的&#xff0c;相反&#xff0c;这正是遥感数字图像处理工作的开始。 遥感数字图像&#xff08;Digital image&#xff0c;后简称“遥感影像”&#xff09;是…

FTP

文章目录 概述主动模式和被动模式的工作过程注意事项 概述 文件传输协议 FTP&#xff08;File Transfer Protocol&#xff09;在 TCP/IP 协议族中属于应用层协议&#xff0c;是文件传输标准。主要功能是向用户提供本地和远程主机之间的文件传输&#xff0c;尤其在进行版本升级…

数据分析每周挑战——心衰患者特征数据集

这是一篇关于医学数据的数据分析&#xff0c;但是这个数据集数据不是很多。 背景描述 本数据集包含了多个与心力衰竭相关的特征&#xff0c;用于分析和预测患者心力衰竭发作的风险。数据集涵盖了从40岁到95岁不等年龄的患者群体&#xff0c;提供了广泛的生理和生活方式指标&a…