我想格式化一条消息,例如“1.0 KiB的数据传输耗时1:32小时”。但是我需要格式化和本地化的字节数和持续时间。我发现了几个想法如何格式化字节数,持续时间似乎很好。但随之而来的是本地化和我的本土代码变得过度。 我正在寻找任何想法如何在ICU库的帮助下实现这种格式化。
答案 0 :(得分:2)
您可以简单地使用Java MessageFormat
,它允许您将不同的java类型格式化为字符串;这种格式应该做你想做的事情
final MessageFormat format = new MessageFormat("Data transfer of {0,number,0.0} KiB took {1}:{2} hours");
用法是
final String formatted = format.format(new Object[]{amountTransferred, hours, minutes});
amountTransferred
是double
或float
或BigDecimal
,hours
和minutes
是整数类型。
如果您需要单独执行此操作,已经有post关于如何将分钟数格式化为HH:mm
。
答案 1 :(得分:0)
ICU现在有单位的紧凑小数(1.0 MiB)和持续时间格式。这是一个很好的问题,我不认为msgformat现在本身支持这个。
你可以做的只是在Boris的响应中使用没有KiB的模式{0,number}
,但是然后调用format.setFormat(0,...)
用CompactDecimalFormat或单位格式化程序替换数字格式化程序。