Unity【DateTime】- 如何为软件添加使用有效期
【摘要】
功能需求:为软件设定一个使用有效期,当超过指定时间后,程序无法运行。
实现思路:定义一个常量,用于记录一个时间,我们称之为标记时间,使用当前时间减去标记时间,如果时间间隔大于设定的有效期,退出程序。
具体步骤:
1.定义标记时间常量:
//标记时间private const string flag = "2022-03-17 1...
功能需求:为软件设定一个使用有效期,当超过指定时间后,程序无法运行。
实现思路:定义一个常量,用于记录一个时间,我们称之为标记时间,使用当前时间减去标记时间,如果时间间隔大于设定的有效期,退出程序。
具体步骤:
1.定义标记时间常量:
-
//标记时间
-
private const string flag = "2022-03-17 17:11:25";
使用DateTime.Parse可将其转换为DateTime类型:
DateTime flagTime = DateTime.Parse(flag);
2.获取当前时间:
DateTime nowTime = DateTime.Now;
3.计算时间间隔:
TimeSpan span = nowTime - flagTime;
4.判断时间间隔是否大于有效期:
if (span.Days >= expires) Application.Quit();
但是这样这样实现会有一个问题,DateTime.Now获取的是本地计算机时间,如果用户故意修改计算机的时间,那么这个功能将无意义。
因此将获取当前时间的步骤修改为调用网络接口来获取时间,这里以如下这个接口为例:
https://apps.game.qq.com/CommArticle/app/reg/gdate.php
使用GET方式调用接口,代码如下:
-
using System;
-
using UnityEngine;
-
using System.Collections;
-
using UnityEngine.Networking;
-
-
public class Example : MonoBehaviour
-
{
-
//标记时间
-
private const string flag = "2022-03-17 17:11:25";
-
//有效期 单位:天
-
private const int expires = 30;
-
-
private void Start()
-
{
-
StartCoroutine(RequestCoroutine());
-
}
-
private IEnumerator RequestCoroutine()
-
{
-
string url = "https://apps.game.qq.com/CommArticle/app/reg/gdate.php";
-
using (UnityWebRequest request = UnityWebRequest.Get(url))
-
{
-
yield return request.SendWebRequest();
-
if(request.result == UnityWebRequest.Result.Success)
-
{
-
Debug.Log(request.downloadHandler.text);
-
}
-
else
-
{
-
Debug.LogError($"get time failed: {request.error}");
-
}
-
}
-
}
-
}
调用接口我们可以收到如图所示的响应,我们只需要通过Split函数将字符串分割,获取到等号后面的部分,再使用Substring函数截取‘’符号中间的部分即可:
-
string timeStr = request.downloadHandler.text.Split('=')[1];
-
timeStr = timeStr.Trim().Substring(1, timeStr.Length - 4);
-
Debug.Log(timeStr);
完整代码:
-
using System;
-
using UnityEngine;
-
using System.Collections;
-
using UnityEngine.Networking;
-
-
public class Example : MonoBehaviour
-
{
-
//标记时间
-
private const string flag = "2022-03-17 17:11:25";
-
//有效期 单位:天
-
private const int expires = 30;
-
-
private void Start()
-
{
-
StartCoroutine(RequestCoroutine());
-
}
-
private IEnumerator RequestCoroutine()
-
{
-
string url = "https://apps.game.qq.com/CommArticle/app/reg/gdate.php";
-
using (UnityWebRequest request = UnityWebRequest.Get(url))
-
{
-
yield return request.SendWebRequest();
-
if(request.result == UnityWebRequest.Result.Success)
-
{
-
Debug.Log(request.downloadHandler.text);
-
string timeStr = request.downloadHandler.text.Split('=')[1];
-
timeStr = timeStr.Trim().Substring(1, timeStr.Length - 4);
-
Debug.Log(timeStr);
-
DateTime flagTime = DateTime.Parse(flag);
-
DateTime nowTime = DateTime.Parse(timeStr);
-
TimeSpan span = nowTime - flagTime;
-
Debug.Log(span);
-
if (span.Days >= expires) Application.Quit();
-
}
-
else
-
{
-
Debug.LogError($"get time failed: {request.error}");
-
}
-
}
-
}
-
}
文章来源: coderz.blog.csdn.net,作者:CoderZ1010,版权归原作者所有,如需转载,请联系作者。
原文链接:coderz.blog.csdn.net/article/details/123555866
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)