代码之家  ›  专栏  ›  技术社区  ›  fabien7474 Jan Tchärmän

从现在起如何用joda时间计算经过的时间?

  •  68
  • fabien7474 Jan Tchärmän  · 技术社区  · 15 年前

    我需要计算 从一个特定日期到现在所经过的时间 并以与StackOverflow问题相同的格式显示,即:

    15s ago
    2min ago
    2hours ago
    2days ago
    25th Dec 08
    

    你知道如何用Java实现它吗? Joda-Time 图书馆 是吗?是否有一个已经实现它的助手方法,或者我应该自己编写算法?

    4 回复  |  直到 6 年前
        1
  •  111
  •   BalusC    12 年前

    要使用jodatime计算经过的时间,请使用 Period . 要在所需的人工表示中格式化经过的时间,请使用 PeriodFormatter 你可以用它来建造 PeriodFormatterBuilder .

    下面是一个启动示例:

    DateTime myBirthDate = new DateTime(1978, 3, 26, 12, 35, 0, 0);
    DateTime now = new DateTime();
    Period period = new Period(myBirthDate, now);
    
    PeriodFormatter formatter = new PeriodFormatterBuilder()
        .appendSeconds().appendSuffix(" seconds ago\n")
        .appendMinutes().appendSuffix(" minutes ago\n")
        .appendHours().appendSuffix(" hours ago\n")
        .appendDays().appendSuffix(" days ago\n")
        .appendWeeks().appendSuffix(" weeks ago\n")
        .appendMonths().appendSuffix(" months ago\n")
        .appendYears().appendSuffix(" years ago\n")
        .printZeroNever()
        .toFormatter();
    
    String elapsed = formatter.print(period);
    System.out.println(elapsed);
    

    现在这张照片

    3 seconds ago
    51 minutes ago
    7 hours ago
    6 days ago
    10 months ago
    31 years ago
    

    (咳嗽,年老,咳嗽) 您可以看到,我也考虑了数月和数年,并将其配置为当这些值为零时忽略这些值。

        2
  •  18
  •   Joshua Pinter    6 年前

    使用 PrettyTime 简单的消逝时间。

    我试过 HumanTime 正如@sfussenegger回答并使用jodatime的 Period 但对于人类可读的经过时间,我发现最简单、最干净的方法是 漂亮的时间 图书馆。

    下面是几个简单的输入和输出示例:

    五分钟前

    DateTime fiveMinutesAgo = DateTime.now().minusMinutes( 5 );
    
    new PrettyTime().format( fiveMinutesAgo.toDate() );
    
    // Outputs: "5 minutes ago"
    

    前不久

    DateTime birthday = new DateTime(1978, 3, 26, 12, 35, 0, 0);
    
    new PrettyTime().format( birthday.toDate() );
    
    // Outputs: "4 decades ago"
    

    警告: 我试过利用图书馆更精确的功能,但它会产生一些奇怪的结果,所以要小心使用它,并在不危及生命的项目中使用它。

    日本药典

        3
  •  10
  •   Community CDub    8 年前

    您可以使用PeriodFormatter完成此操作,但不必像在中那样努力创建自己的PeriodFormatBuilder。 other answers . 如果它适合您的情况,您可以使用默认格式化程序:

    Period period = new Period(startDate, endDate);
    System.out.println(PeriodFormat.getDefault().print(period))
    

    (帽子尖到 this answer 在一个类似的问题上,我是为了发现问题而交叉发布)

        4
  •  7
  •   sfussenegger    15 年前

    有一个名为 HumanTime 我很高兴。