C# Github上次提交值

C# Github上次提交值,c#,json,http,github,commit,C#,Json,Http,Github,Commit,因此,我一直在做一些进一步的研究、测试等,并得到了一些人的帮助。我已经想出了以下方法: public void GithubLastCommit(string apiLink) { using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (compatible

因此,我一直在做一些进一步的研究、测试等,并得到了一些人的帮助。我已经想出了以下方法:

public void GithubLastCommit(string apiLink)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("User-Agent",
                "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");

            using (var response = client.GetAsync(apiLink).Result)
            {
                var json = response.Content.ReadAsStringAsync().Result;

                dynamic commits = JArray.Parse(json);
                DateTime lastCommit = commits[0].commit.author.date;
                DateTime now = DateTime.Now;
                int Days = (int)((now - lastCommit).TotalDays);
                int Hours = (int)((now - lastCommit).TotalHours);
                int Minutes = (int)((now - lastCommit).TotalMinutes);
                MessageBox.Show(Hours.ToString());
                if(Hours <=24)
                {
                    MessageBox.Show(Hours.ToString() + "Hours ago");
                }
            }
        }
    }
public void GithubLastCommit(字符串apiLink)
{
使用(var client=new HttpClient())
{
client.DefaultRequestHeaders.Add(“用户代理”,
“Mozilla/5.0(兼容;MSIE 10.0;Windows NT 6.2;WOW64;Trident/6.0)”;
使用(var response=client.GetAsync(apiLink.Result)
{
var json=response.Content.ReadAsStringAsync().Result;
动态提交=JArray.Parse(json);
DateTime lastCommit=commits[0]。commit.author.date;
DateTime now=DateTime.now;
整数天=(整数)((现在-最后提交).TotalDays);
inthours=(int)((now-lastCommit).TotalHours);
int分钟=(int)((now-lastCommit).TotalMinutes);
Show(Hours.ToString());

如果(小时虽然JSON日期没有标准,但大多数JSON日期都是以UTC表示的。时间值末尾的“Z”表示如下:

事实上,这是可以配置的。因此,您需要执行以下操作:

DateTime now = DateTime.UtcNow;
您的计算应该是正确的。这是因为
DateTime
减法运算符假定它们在同一时区,即使不在同一时区。更多详细信息和

更新

github如何设置“最新提交”时间的格式?如果查看页面的HTML源代码,就会看到如下时间:

因此,看起来,如果时差大于36小时但小于30天,则它们将四舍五入(可能最多)到最接近的天数。您需要复制此逻辑以在代码中获得类似的结果。因此,3.5990天将四舍五入到“4天前”


我在这里找到了相同逻辑的另一个版本:

您当前得到的是什么输出?您希望得到什么?我怀疑您解析JSON错误,或者您的日期代码有问题。我当前从提供的api链接接收整个JSON文件,并将其解析到JArray中,我是selec单击第一个索引并浏览可用的部分以达到日期。添加的每个部分或文件都有一个特定的哈希或SHA代码。我要查找的主要代码是SHA为47146d的代码。等,当查看api链接时,它是第一个提交[0]然后,我尝试从commit.author.date中检索最新的提交,我希望得到1,但由于某些原因得到11。发布您收到的内容和正在得到的内容。使用(var response=client.GetAsync(apiLink.Result){var json=response.Content.ReadAsStringAsync().Result;使用此..它从链接的页面检索所有文本。粘贴到注释中的内容太多,但它是json格式的文本页面。(它是json中的对象数组)因此,我选择了第一个索引,它获取第一个对象并允许我访问其属性。是的,我知道它必须是这样的!由于时差,我知道必须包含某种属性,以确保它知道如何转换它或至少知道如何处理now值。我将立即测试它!是的..t与以前相比,his基于上一次提交的值给了我一个更接近的值,非常感谢:)然而,我也在其他几个github上尝试过这个方法,只是为了确保它能正常工作,我没有发疯:P这是我自己的回购协议2015-04-23T21:46:10Z的当前图章,在撰写本文时,它是2015-04-27T22:09:00,但当我使用上面的DateTime.UtcNow;它给我的时间是天..3.5990…github说最后一次提交是4天写这篇文章的时候已经准备好4天了,是不是应该接近4.0547..或者类似的东西?我做错什么了吗?@Darkshadow-答案更新了。如果你仍然有问题,你能告诉我如何重现这个问题吗?例如,你能给我一个有问题的JSON示例吗?还有,你的计算机上的时间是多少在?我刚刚意识到,当我在玩游戏,更新git和所有东西,并查看json响应时,时间戳是不同的,这让我想到了它使用的时区,所以我认为这对它有一个奇怪的影响。但是的,我得出了相同的结论,他们总结了…因此我意识到我可以使用代码我已经回答了我的问题,并简单地把它归纳起来:P现在它至少是半准确的:P我感谢你的帮助:)它确实帮助我更好地理解它:)我的ISO 8601格式的时间是:2015-04-28T03:13:05Z atm
DateTime now = DateTime.UtcNow;
       <span class="css-truncate css-truncate-target"><time datetime="2015-04-27T15:31:05Z" is="time-ago">Apr 27, 2015</time></span>
n.prototype.timeAgo = function () {
var e = (new Date).getTime() - this.date.getTime(),
t = Math.round(e / 1000),
n = Math.round(t / 60),
r = Math.round(n / 60),
i = Math.round(r / 24),
o = Math.round(i / 30),
a = Math.round(o / 12);
return 0 > e ? 'just now' : 10 > t ? 'just now' : 45 > t ? t + ' seconds ago' : 90 > t ? 'a minute ago' : 45 > n ? n + ' minutes ago' : 90 > n ? 'an hour ago' : 24 > r ? r + ' hours ago' : 36 > r ? 'a day ago' : 30 > i ? i + ' days ago' : 45 > i ? 'a month ago' : 12 > o ? o + ' months ago' : 18 > o ? 'a year ago' : a + ' years ago'
},