Unity【DateTime】- 如何为软件添加使用有效期

举报
CoderZ1010 发表于 2022/09/25 05:33:39 2022/09/25
【摘要】 功能需求:为软件设定一个使用有效期,当超过指定时间后,程序无法运行。 实现思路:定义一个常量,用于记录一个时间,我们称之为标记时间,使用当前时间减去标记时间,如果时间间隔大于设定的有效期,退出程序。 具体步骤: 1.定义标记时间常量: //标记时间private const string flag = "2022-03-17 1...

功能需求:为软件设定一个使用有效期,当超过指定时间后,程序无法运行。

实现思路:定义一个常量,用于记录一个时间,我们称之为标记时间,使用当前时间减去标记时间,如果时间间隔大于设定的有效期,退出程序。

具体步骤:

1.定义标记时间常量:


  
  1. //标记时间
  2. 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方式调用接口,代码如下:


  
  1. using System;
  2. using UnityEngine;
  3. using System.Collections;
  4. using UnityEngine.Networking;
  5. public class Example : MonoBehaviour
  6. {
  7. //标记时间
  8. private const string flag = "2022-03-17 17:11:25";
  9. //有效期 单位:天
  10. private const int expires = 30;
  11. private void Start()
  12. {
  13. StartCoroutine(RequestCoroutine());
  14. }
  15. private IEnumerator RequestCoroutine()
  16. {
  17. string url = "https://apps.game.qq.com/CommArticle/app/reg/gdate.php";
  18. using (UnityWebRequest request = UnityWebRequest.Get(url))
  19. {
  20. yield return request.SendWebRequest();
  21. if(request.result == UnityWebRequest.Result.Success)
  22. {
  23. Debug.Log(request.downloadHandler.text);
  24. }
  25. else
  26. {
  27. Debug.LogError($"get time failed: {request.error}");
  28. }
  29. }
  30. }
  31. }

调用接口我们可以收到如图所示的响应,我们只需要通过Split函数将字符串分割,获取到等号后面的部分,再使用Substring函数截取‘’符号中间的部分即可:


  
  1. string timeStr = request.downloadHandler.text.Split('=')[1];
  2. timeStr = timeStr.Trim().Substring(1, timeStr.Length - 4);
  3. Debug.Log(timeStr);

 

 完整代码:


  
  1. using System;
  2. using UnityEngine;
  3. using System.Collections;
  4. using UnityEngine.Networking;
  5. public class Example : MonoBehaviour
  6. {
  7. //标记时间
  8. private const string flag = "2022-03-17 17:11:25";
  9. //有效期 单位:天
  10. private const int expires = 30;
  11. private void Start()
  12. {
  13. StartCoroutine(RequestCoroutine());
  14. }
  15. private IEnumerator RequestCoroutine()
  16. {
  17. string url = "https://apps.game.qq.com/CommArticle/app/reg/gdate.php";
  18. using (UnityWebRequest request = UnityWebRequest.Get(url))
  19. {
  20. yield return request.SendWebRequest();
  21. if(request.result == UnityWebRequest.Result.Success)
  22. {
  23. Debug.Log(request.downloadHandler.text);
  24. string timeStr = request.downloadHandler.text.Split('=')[1];
  25. timeStr = timeStr.Trim().Substring(1, timeStr.Length - 4);
  26. Debug.Log(timeStr);
  27. DateTime flagTime = DateTime.Parse(flag);
  28. DateTime nowTime = DateTime.Parse(timeStr);
  29. TimeSpan span = nowTime - flagTime;
  30. Debug.Log(span);
  31. if (span.Days >= expires) Application.Quit();
  32. }
  33. else
  34. {
  35. Debug.LogError($"get time failed: {request.error}");
  36. }
  37. }
  38. }
  39. }

文章来源: coderz.blog.csdn.net,作者:CoderZ1010,版权归原作者所有,如需转载,请联系作者。

原文链接:coderz.blog.csdn.net/article/details/123555866

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。