Python的Time4J代码示例对应的是什么?
// duration in seconds normalized to hours, minutes and seconds
Duration<?> dur = Duration.of(337540, ClockUnit.SECONDS).with(Duration.STD_CLOCK_PERIOD);
// custom duration format => hh:mm:ss
String s1 = Duration.Formatter.ofPattern("hh:mm:ss").format(dur);
System.out.println(s1); // output: 93:45:40
// localized duration format for french
String s2 = PrettyTime.of(Locale.FRANCE).print(dur, TextWidth.WIDE);
System.out.println(s2); // output: 93 heures, 45 minutes et 40 secondes
获取 93:45:40
很容易:
#!/usr/bin/env python3
from datetime import timedelta
dur = timedelta(seconds=337540)
print(dur) # -> 3 days, 21:45:40
fields = {}
fields['hours'], seconds = divmod(dur // timedelta(seconds=1), 3600)
fields['minutes'], fields['seconds'] = divmod(seconds, 60)
print("%(hours)02d:%(minutes)02d:%(seconds)02d" % fields) # -> 93:45:40
但是我如何在Python中模拟PrettyTime.of(Locale.FRANCE).print(dur, TextWidth.WIDE)
的Java代码(不硬编码单位)?
gettext
的手动解决方案)。有一个标准模型(零、一、少数、多数、其他)。(2)babel
解决方案的问题在于它硬编码了可能适用于西方地区但在一般情况下可能失败的模式(TextWidth.WIDE
)-- 手动翻译允许根据需要调整格式。 - jfsif fields[unit]
在genexpr中可以轻松处理零值。问题在于,我必须传递granularity
、threshold
参数以获得更精确的答案,并且它修复了单位(它们是小时、分钟、秒),而", ".join
则修复了格式。如果我只调用format_timedelta(timedelta(seconds=337540), locale='fr')
,那么结果分别为'4 jours'
和'1 seconde'
对应于timedelta(seconds=1)
,如果我不需要精确的答案,那就可以了。我想避免明确的格式,比如"hh:mm:ss"
,这可能在某些语言环境下不合适。 - jfs