首页 > 解决方案 > Java:将日期字符串转换为字符

问题描述

我正在寻找一种将格式化日期转换为 Java 字符的方法。

String fdate = DateTimeFormatter
            .ofPattern("yyyyMMddHHmmssSSS")
            .withZone(ZoneId.of("UTC"))
            .format(
                Instant.now(Clock.systemUTC()));

这给了我一个类似的 17 个字符的字符串,仅由数字组成。我想将数字“转换”为字符,例如十六进制但使用所有字符,以缩短日期(实际上我需要生成具有最少字符的唯一 id ......客户约束)。

这会像我一样返回:

Z5G1BJ9F...

接下来我不需要能够转换回“普通”字符串。只允许使用常用字符 [1-9a-zA-Z]。

有没有简单的方法来做到这一点?

谢谢。

标签: javastringdatecharacter

解决方案


格式中的日期yyyyMMddHHmmssSSS可能仍会导致重复 ID。

要生成具有最少字符的唯一 ID,请使用数据库序列来生成下一个数字(或使用文件自己实现)。如果您的序列从 1 开始并增加 1,您将不会获得更短的唯一编号。

如果您的约束是使用[1-9a-zA-Z]字符,您可以应用Base58或类似的编码。不幸的是 Base64 使用+, /, 并且可能=不符合您的要求。在BitcoinJ 项目中可以找到 Base58 的示例实现:

BigInteger bi = BigInteger.valueOf(3471844090L);
assertEquals("16Ho7Hs", Base58.encode(bi.toByteArray()));

推荐阅读