Convert seconds to years/days/hours/minutes automatically, using JodaTime?

杀马特。学长 韩版系。学妹 提交于 2019-12-08 00:46:30

问题


Is there way to convert 'x' seconds to y hours and z seconds when say x exceeds 3600 seconds? Similarly, convert it to 'a minutes and b seconds' when x exceeds 60 but is less than 3600 seconds, using JodaTime? I understand that I would have to specify what I need in the PeriodFormatter, but I don't want to specify it - I want a formatted text based on value of seconds.

This is similar to how you would post on a forum and then your post will initially be shown as 'posted 10 seconds ago'.. after 1 minute you would see 'posted 1minute 20 seconds ago' and likewise for weeks,days,years.


回答1:


I'm not sure why you don't want to specify what you need in PeriodFormatter. JodaTime doesn't know how you want to display a period as a string, so you need to tell it via the PeriodFormatter.

As 3600 seconds is 1 hour, using the formatter properly will automatically do this for you. Here's a code example using a number of different inputs on the same formatter which should achieve your desired result.

    Seconds s1 = Seconds.seconds(3601);
    Seconds s2 = Seconds.seconds(2000);
    Seconds s3 = Seconds.seconds(898298);
    Period p1 = new Period(s1);
    Period p2 = new Period(s2);
    Period p3 = new Period(s3);

    PeriodFormatter dhm = new PeriodFormatterBuilder()
        .appendDays()
        .appendSuffix(" day", " days")
        .appendSeparator(" and ")
        .appendHours()
        .appendSuffix(" hour", " hours")
        .appendSeparator(" and ")
        .appendMinutes()
        .appendSuffix(" minute", " minutes")
        .appendSeparator(" and ")
        .appendSeconds()
        .appendSuffix(" second", " seconds")
        .toFormatter();

    System.out.println(dhm.print(p1.normalizedStandard()));
    System.out.println(dhm.print(p2.normalizedStandard()));
    System.out.println(dhm.print(p3.normalizedStandard()));

Produces output::

1 hour and 1 second

33 minutes and 20 seconds

3 days and 9 hours and 31 minutes and 38 seconds




回答2:


I like the previous answer, but this option looks more readable:

PeriodFormat.getDefault().print(new Period(0, 0, yourSecondsValue, 0)
    .normalizedStandard())


来源:https://stackoverflow.com/questions/10891762/convert-seconds-to-years-days-hours-minutes-automatically-using-jodatime

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!