I chosen something like the second solution to avoid adding a dependency to my 
project (it is a bit overkill for what I wanted to achieve). But shouldn’t this 
formatted-print feature be added in Duration?

Julien

---
Julien Delplanque
Doctorant à l’Université de Lille 1
http://juliendelplanque.be/phd.html
Equipe Rmod, Inria
Bâtiment B 40, avenue Halley 59650 Villeneuve d'Ascq
Numéro de téléphone: +333 59 35 86 40

> Le 3 janv. 2018 à 23:02, Andreas Brodbeck <da...@mindclue.ch> a écrit :
> 
> Am 03.01.18 um 14:07 schrieb Julien:
>> Hello,
>> 
>> I do not see how to do a formatted print from a duration.
>> 
>> I would like to be able to do something like:
>> 
>> String streamContents: [ :s | 90 minutes formatted: ‘hh:mm’ printOn: s ]
>> 
>> The Duration>>#printOn: method prints the ANSI 5.8.2.16 format: 
>> [-]D:HH:MM:SS[.S]
>> 
>> The Duration>>#printHumanReadableOn: is not printing in the format I want.
>> 
>> Am I missing something or such feature does not exist actually?
> 
> Hi Julien
> 
> I did not find a ready made method for that, either. Probably because
> there is no standard way to print a *Duration* as minutes and seconds,
> because it is not obvious how to print it (Compared to instances of the
> *Time* class).
> 
> My solution would be to implement your own printing method using the
> GRPrinter from the Grease package (Installable through Catalog Browser
> in Pharo 6):
> 
> *****************************
> 
> | hoursPrinter minutesPrinter printer |
> 
> "Note: you can not use 'duration minutes', since this will give you only
> the partial minutes inside a day"
> hoursPrinter := GRMappedPrinter
>       block: [ :duration | duration asMinutes // 60 ]
>       next: (GRNumberPrinter new).
> 
> minutesPrinter := GRMappedPrinter
>       block: [ :duration | duration minutes ]
>       next: (GRPrinter numberWithAtLeastDigits: 2).
> 
> printer := hoursPrinter, $:, minutesPrinter.
>               
> ^printer print: (9876 minutes) "Will result in '164:36'"
> 
> *****************************
> 
> 
> 
> 2. solution: Or just dead simple:
> 
> *****************************
> 
> | duration |
> duration := (9876 minutes).
> 
> ^(duration asMinutes // 60) asString, ':',
> duration minutes asTwoCharacterString
> 
> *****************************
> 
> 
> Cheers, Andreas
> 
> -- 
> Andreas Brodbeck
> www.mindclue.ch <http://www.mindclue.ch/>

Reply via email to