java - Java:将日期字符串转换为字符
问题描述
我正在寻找一种将格式化日期转换为 Java 字符的方法。
String fdate = DateTimeFormatter
.ofPattern("yyyyMMddHHmmssSSS")
.withZone(ZoneId.of("UTC"))
.format(
Instant.now(Clock.systemUTC()));
这给了我一个类似的 17 个字符的字符串,仅由数字组成。我想将数字“转换”为字符,例如十六进制但使用所有字符,以缩短日期(实际上我需要生成具有最少字符的唯一 id ......客户约束)。
这会像我一样返回:
Z5G1BJ9F...
接下来我不需要能够转换回“普通”字符串。只允许使用常用字符 [1-9a-zA-Z]。
有没有简单的方法来做到这一点?
谢谢。
解决方案
格式中的日期yyyyMMddHHmmssSSS
可能仍会导致重复 ID。
要生成具有最少字符的唯一 ID,请使用数据库序列来生成下一个数字(或使用文件自己实现)。如果您的序列从 1 开始并增加 1,您将不会获得更短的唯一编号。
如果您的约束是使用[1-9a-zA-Z]
字符,您可以应用Base58或类似的编码。不幸的是 Base64 使用+
, /
, 并且可能=
不符合您的要求。在BitcoinJ 项目中可以找到 Base58 的示例实现:
BigInteger bi = BigInteger.valueOf(3471844090L);
assertEquals("16Ho7Hs", Base58.encode(bi.toByteArray()));
推荐阅读
- python - 给 numpy 数组 A 和是 MxN 和 B 这是 DxN 找到 AB=L2(A[i,:]-B[:,j]) 的欧几里德距离 st ijth 元素
- azure-logic-apps - For Each 中未显示逻辑应用迭代失败
- javascript - 类型上不存在属性:为什么 TypeScript 会抱怨而 JavaScript 没有?
- r - 在 R 中创建一个向量(关联数组)
- selenium - 无法按标签查找元素
- angular - 如何使用星云主题修补多个复选框值以在 Angular 中编辑表单
- javascript - ts 和 js 中的数字概率
- python-3.x - Python3 中的 re.sub 问题而不是 Python2 中的问题
- reactjs - 为什么反应在每个输入中重复我的输入值
- android - 当我在前一个屏幕上使用带有 MotionLayout 的 ImageViewFilter 时,AppcompatImageView 不显示 VectorDrawable