如何在指定Unix时间发送Minecraft名称抢注请求?
实现指定Unix时间发送Minecraft名称抢注请求
要精准在指定Unix时间发送请求,核心是计算当前时间与目标时间的差值,等待对应时长后再执行请求逻辑。以下是修改后的代码实现:
public async Task Put(string name, long targetUnixTimeMs) { // 获取当前时间的Unix毫秒时间戳 var currentUnixMs = DateTimeOffset.Now.ToUnixTimeMilliseconds(); // 计算需要等待的毫秒数 var delayMs = targetUnixTimeMs - currentUnixMs; if (delayMs > 0) { Console.WriteLine($"等待 {delayMs} 毫秒后发送请求..."); await Task.Delay(Convert.ToInt32(delayMs)); } else if (delayMs < 0) { Console.WriteLine("目标时间已过,立即发送请求"); } // 原请求逻辑 var sent = DateTimeOffset.Now.ToUnixTimeMilliseconds(); Console.WriteLine($"发送时间: {sent}"); using (var request = new HttpRequestMessage(HttpMethod.Put, $"https://api.minecraftservices.com/minecraft/profile/name/{name}")) { request.Headers.Add("Authorization", "Bearer Token"); using (var response = await client.SendAsync(request)) { var recv = DateTimeOffset.Now.ToUnixTimeMilliseconds(); Console.WriteLine($"状态码: {response.StatusCode}"); Console.WriteLine($"接收时间: {recv}"); Console.WriteLine(); } } }
关键说明
- 时间单位匹配:确保传入的
targetUnixTimeMs是毫秒级的Unix时间戳,如果你的目标时间是秒级,需要先乘以1000转换(比如targetUnixTimeSec * 1000) - 等待时长限制:
Task.Delay()的参数是int类型,最大支持约24天的等待(int最大值为2147483647毫秒),如果需要等待更久,需要拆分多次等待操作 - 时间准确性:本地系统时间的误差会直接影响请求发送时机,建议确保本地时间与Minecraft服务器时间同步
- 异常处理:如果需要支持取消等待,可以给方法添加
CancellationToken参数,传入Task.Delay(delayMs, cancellationToken)来实现
内容的提问来源于stack exchange,提问作者hud Kad
相关产品推荐
相关产品推荐

