当前位置: 首页 > 知识库问答 >
问题:

如何使用Java计算相对时间跨度(代码转换问题)?[副本]

单于海荣
2023-03-14
public static String relTime(LocalDateTime now)
{
    // accepted answer converted to Java
    const int min = 60 * SECOND;
    const int hour = 60 * MINUTE;
    const int day = 24 * HOUR;
    const int mon = 30 * DAY;
    
    // still don't know how to convert this method
    var ts = new TimeSpan(DateTime.UtcNow.Ticks - yourDate.Ticks);
    double delta = Math.Abs(ts.TotalSeconds);
    
    if (delta < 1 * MINUTE)
        return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";

    if (delta < 2 * MINUTE)
        return "a minute ago";
    
    if (delta < 45 * MINUTE)
        return ts.Minutes + " minutes ago";
    
    if (delta < 90 * MINUTE)
        return "an hour ago";
    
    if (delta < 24 * HOUR)
        return ts.Hours + " hours ago";

    if (delta < 48 * HOUR)
        return "yesterday";
    
    if (delta < 30 * DAY)
        return ts.Days + " days ago";
    
    if (delta < 12 * MONTH)
    {
        int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
        return months <= 1 ? "one month ago" : months + " months ago";
    }
    else
    {
        int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
        return years <= 1 ? "one year ago" : years + " years ago";
    }
}

虽然我从Stack Overflow查找timespanticks的等价物中读到了两个问题,但我对如何正确转换代码行有任何想法。此外,我必须获得一个double,它将需要math.abs()来获得totalseconds,我也找不到正确的方法来处理它,但是我确实找到了zoneoffset.oftotalseconds并且仍然不知道如何处理它。

那么我该如何正确地转换它呢?

var ts = new TimeSpan(DateTime.UtcNow.Ticks - yourDate.Ticks);
double delta = Math.Abs(ts.TotalSeconds);

共有1个答案

西门安民
2023-03-14

您需要更深入地了解这种方法的实际作用。将代码从C#直接翻译成Java不会给您提供一个好的解决方案,而且会使您陷入特定于语言的细节。

这两行基本上计算时间戳与当前时间的(绝对)秒差。这可以用Java编写,如下所示:

Duration duration = Duration.between(LocalDateTime.now(), timestamp);
long delta = duration.abs().getSeconds();

我只是回答你的实际问题,如何转换这两条线。提供的代码段不是有效的Java代码,并且缺少某些部分。delta是以秒为单位的差异,它不一定需要是双倍的。传递给方法的参数的名称不应该是now,因为这是要与方法中的当前时间进行比较的时间戳。

 类似资料:
  • 问题内容: 我想花两次(从纪元以来的秒数),并以如下格式显示两者之间的差异: - 2 minutes - 1 hour, 15 minutes - 3 hours, 9 minutes - 1 minute ago - 1 hour, 2 minutes ago 我该怎么做? 问题答案: 你也可以使用进行此操作。使用代表一个时期。要格式化所需的人表示期间,利用它你可以建立。 这是一个启动示例: 更

  • null null T(n)=O(1)+O(nlogn)=O(nlogn) 但我不确定。有人能帮帮我吗。

  • 我知道嵌套for循环的时间复杂度等于最里面的循环执行的次数。 像外部循环从1到n的每个嵌套循环一样,它应该运行n次,但这里我们有,这使得算法运行的顺序更好。实际上,我在IDE中编写了这段代码,并在循环结束后打印了x的最终结果,对于不同的n值,我看到跳入内部for循环需要将近n倍的时间。 所以我认为这个算法的整个顺序是,但我不确定

  • 本文向大家介绍php时间计算相关问题小结,包括了php时间计算相关问题小结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了php时间计算相关问题。分享给大家供大家参考,具体如下: 1. php获取三个月前的日期 2. 计算日期30天后 可以用strtotime PHP提供了一个超级简单的方式来完成本来要几十行代码的工作。 先把某日期转换成UNIX时间戳 3. 转换2日期的时间戳...然后相

  • 我正在尝试使用下面的代码转换当前的UTC时间(来自我的Linux服务器的时间)。 当我执行代码时,我得到以下异常: 我看到正确提取的UTC时间为:05-11-2018 12:55:28,但代码无法将字符串解析为IST(印度标准时间)。我不明白怎样才能解决这个问题。谁能让我知道我在这里犯的错误是什么,我该如何解决它?

  • 我正在尝试分析一个算法的时间复杂度。 下面的算法旨在只检查数组的一部分,所以如果它没有多大意义,请不要担心。 我对计算循环周围的时间复杂度很困惑,请看看我的评论。 这是否意味着我们有: T(N) = (C2 C4 C5)N (C1 C3 C6) T(N) = C7*N (C8) T(N)=N?? 循环中的所有内容都是*N? 先谢谢!