修正任务时间转换
This commit is contained in:
@@ -47,6 +47,39 @@ namespace TcgEngine
|
||||
|
||||
return taskData;
|
||||
}
|
||||
|
||||
// 本地读取的缓存存储处
|
||||
// 还没改
|
||||
public TaskData LoadFromResponse(TaskDataResponse response)
|
||||
{
|
||||
TaskData task = ScriptableObject.CreateInstance<TaskData>();
|
||||
task.id = response.id;
|
||||
task.name = response.name;
|
||||
task.desc = response.desc;
|
||||
task.condition = (TaskConditionType)response.condition;
|
||||
task.value1 = response.value1;
|
||||
task.value2 = response.value2;
|
||||
task.value3 = response.value3;
|
||||
|
||||
if (response.rewardTypes != null)
|
||||
{
|
||||
task.rewardTypes = new TaskRewardType[response.rewardTypes.Length];
|
||||
for (int i = 0; i < response.rewardTypes.Length; i++)
|
||||
{
|
||||
task.rewardTypes[i] = (TaskRewardType)response.rewardTypes[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
task.rewardTypes = new TaskRewardType[0];
|
||||
}
|
||||
|
||||
task.rewardNums = response.rewardNums != null ? response.rewardNums : new int[0];
|
||||
task.isDailyTask = response.isDailyTask;
|
||||
task.durationHours = response.durationHours;
|
||||
|
||||
return task;
|
||||
}
|
||||
}
|
||||
|
||||
public enum TaskConditionType
|
||||
@@ -78,11 +111,7 @@ namespace TcgEngine
|
||||
{
|
||||
taskId = taskConfig.id;
|
||||
assignedTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||
expireTime = DateTimeOffset.UtcNow.AddHours(taskConfig.durationHours).ToUnixTimeSeconds();
|
||||
Debug.Log($"<color=red>" +
|
||||
$"任务获取时间=={assignedTime}" +
|
||||
$"任务结束时间=={expireTime}" +
|
||||
$"</color>");
|
||||
expireTime = DateTimeOffset.FromUnixTimeSeconds(assignedTime).AddDays(1).ToUnixTimeSeconds();
|
||||
status = TaskStatus.Active;
|
||||
progress = 0;
|
||||
}
|
||||
@@ -92,27 +121,48 @@ namespace TcgEngine
|
||||
public PlayerTask(PlayerTaskResponse response)
|
||||
{
|
||||
taskId = response.taskId;
|
||||
assignedTime = response.assignedTime;
|
||||
expireTime = response.expireTime;
|
||||
Debug.Log($"<color=red>" +
|
||||
$"任务获取时间=={assignedTime}" +
|
||||
$"任务结束时间=={expireTime}" +
|
||||
$"</color>");
|
||||
assignedTime = Iso8601ToTimestamp(response.assignedTime);
|
||||
expireTime = Iso8601ToTimestamp(response.expireTime);
|
||||
status = (TaskStatus)response.status;
|
||||
progress = response.progress;
|
||||
}
|
||||
|
||||
// 转换为服务器响应数据
|
||||
// 转换为服务器响应数据,传递向服务器
|
||||
public PlayerTaskResponse ToResponse()
|
||||
{
|
||||
PlayerTaskResponse response = new PlayerTaskResponse();
|
||||
response.taskId = taskId;
|
||||
response.assignedTime = assignedTime;
|
||||
response.expireTime = expireTime;
|
||||
response.assignedTime = TimestampToIso8601(assignedTime);
|
||||
response.expireTime = TimestampToIso8601(expireTime);
|
||||
response.status = (int)status;
|
||||
response.progress = progress;
|
||||
return response;
|
||||
}
|
||||
|
||||
// 时间戳(秒)转 ISO 8601 格式字符串
|
||||
public static string TimestampToIso8601(long timestampSeconds)
|
||||
{
|
||||
// 从 Unix 时间戳(秒)创建 DateTimeOffset(UTC 时间)
|
||||
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(timestampSeconds);
|
||||
// 转换为带毫秒的 ISO 8601 格式(UTC+0 时区,带 Z 标识)
|
||||
return dateTimeOffset.ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
|
||||
}
|
||||
|
||||
public static long Iso8601ToTimestamp(string iso8601String)
|
||||
{
|
||||
// 清除字符串前后的空白字符和可能的隐藏字符
|
||||
string cleaned = iso8601String?.Trim() ?? string.Empty;
|
||||
|
||||
if (DateTimeOffset.TryParse(cleaned, out DateTimeOffset dateTimeOffset))
|
||||
{
|
||||
return dateTimeOffset.ToUnixTimeSeconds();
|
||||
}
|
||||
|
||||
// 输出错误信息便于排查(实际运行可删除)
|
||||
Debug.LogError($"解析失败,原始字符串: [{iso8601String}], 清理后: [{cleaned}]");
|
||||
throw new ArgumentException("无效的 ISO 8601 格式字符串");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public enum TaskStatus
|
||||
@@ -122,4 +172,6 @@ namespace TcgEngine
|
||||
Expired = 2, // 过期
|
||||
Claimed = 3 // 已领取
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user