| 1553 | * @throws IOException if writing into buffer fails |
| 1554 | */ |
| 1555 | @Override |
| 1556 | public void print( |
| 1557 | TimeSpan<? super TimeUnit> duration, |
| 1558 | Appendable buffer |
| 1559 | ) throws IOException { |
| 1560 | |
| 1561 | String p = this.getPattern(); |
| 1562 | int n = p.length(); |
| 1563 | StringBuilder sb = new StringBuilder(n); |
| 1564 | |
| 1565 | for (int i = 0; i < n; i++) { |
| 1566 | char c = p.charAt(i); |
| 1567 | |
| 1568 | if (c == '\'') { |
| 1569 | i++; |
| 1570 | while (i < n) { |
| 1571 | if (p.charAt(i) == '\'') { |
| 1572 | if ((i + 1 < n) && (p.charAt(i + 1) == '\'')) { |
| 1573 | i++; |
| 1574 | } else { |
| 1575 | break; |
| 1576 | } |
| 1577 | } |
| 1578 | i++; |
| 1579 | } |
| 1580 | } else { |
| 1581 | sb.append(c); |
| 1582 | } |
| 1583 | } |
| 1584 | |
| 1585 | String pattern = sb.toString(); // literals are now stripped off |
| 1586 | Set<TimeUnit> patternUnits = EnumSet.noneOf(TimeUnit.class); |
| 1587 | |
| 1588 | if (pattern.contains("D")) { |
| 1589 | patternUnits.add(TimeUnit.DAYS); |
| 1590 | } |
| 1591 | if (pattern.contains("h")) { |
| 1592 | patternUnits.add(TimeUnit.HOURS); |
| 1593 | } |
| 1594 | if (pattern.contains("m")) { |
| 1595 | patternUnits.add(TimeUnit.MINUTES); |
| 1596 | } |
| 1597 | if (pattern.contains("s")) { |
| 1598 | patternUnits.add(TimeUnit.SECONDS); |
| 1599 | } |
| 1600 | if (pattern.contains("f")) { |
| 1601 | patternUnits.add(TimeUnit.NANOSECONDS); |
| 1602 | } |
| 1603 | |
| 1604 | super.print(new Normalized(duration, patternUnits), buffer); |
| 1605 | |
| 1606 | } |
| 1607 | |
| 1608 | @Override |
| 1609 | protected MachineTime<TimeUnit> convert(Map<TimeUnit, Long> map, boolean negative) { |