Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

approximate time formatting? #4

Closed
droundy opened this issue Aug 4, 2018 · 8 comments
Closed

approximate time formatting? #4

droundy opened this issue Aug 4, 2018 · 8 comments

Comments

@droundy
Copy link

droundy commented Aug 4, 2018

When I saw the title "humantime", I thought I'd have something that I could use to give a friendly output of how long my program has run (i.e. when it's been running for 36 days, I don't care about picoseconds).

Would adding that as a feature be of interest?

@tailhook
Copy link
Owner

tailhook commented Aug 4, 2018

Currently, you can do that by truncating the value. I.e. to skip fracional seconds, use:

let truncated = Duration::new(original_duration.as_secs(), 0)

To show days:

let truncated = Duration::new((original_duration.as_secs() / 86400)*86400, 0)

In this scenario, an application chooses the granularity, though. And I don't think there is one size fits all approach for that. I.e. one app may show just the number of days when the duration is > 24 hours, and the other could print "1day 8h" up to 5 days.

Currently, the priority of the library is being extremely stable, as it's used in env_logger which is used for every other rust program. So I don't think we can afford to add such functionality since I expect it to be backed in multiple iterations. However, we may add one eventually.

What do you think?

@droundy
Copy link
Author

droundy commented Aug 4, 2018

If I have to do the truncation myself then humantime isn't gaining my anything. That's fine, it's just a few lines of code that I have copied from c++ project to project for years. I just thought I'd mention it as a useful human friendly time feature missing from the library.

@tailhook
Copy link
Owner

tailhook commented Aug 4, 2018

Yes, it's easy as long as you solving a very specific problem. And much harder when you're trying to make a library suitable for a lot of users with different use cases. So closing this for now.

@tailhook tailhook closed this as completed Aug 4, 2018
@theduke
Copy link

theduke commented Jul 16, 2020

A relatively simple method that allows specifying the maximum amount of units would be very handy.

Eg format_duration_with_depth(my_duration, 1)

1 would mean only the largest unit (3 years, 7 months, ...) 2 the two largest (3 years, 2 months, 1 month, 7 days, ...).

@tailhook
Copy link
Owner

Well that's interesting. But different kinds of rounding might also be needed for this case.

@manio
Copy link

manio commented Oct 24, 2021

@tailhook
I have the following code:

let val1 = Duration::from_secs_f32(30.0);
println!("{}", format_duration(val1).to_string());

and it produces:
30s 1us 24ns

Who to blame? :)
ps. I cannot use Duration::new because sometimes i need eg 2.5sec...

@manio
Copy link

manio commented Oct 24, 2021

Filled a bug: rust-lang/rust#90225

@tailhook
Copy link
Owner

Yes, that's a duration constructor error, not formatting issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants