自定义map,当put到timestrap类型的数据时,格式化为yyyy-MM-dd HH:mm:ss类型,
时间: 2025-06-24 18:45:37 浏览: 13
### Java 中自定义 Map 插入 Timestamp 类型并格式化为指定日期时间格式
在 Java 中,可以通过重写 `Map` 的实现类来拦截 `put` 方法,在插入数据时自动将 `Timestamp` 类型的数据格式化为目标字符串形式(如 `"yyyy-MM-dd HH:mm:ss"`)。以下是具体实现方法:
#### 实现思路
1. 创建一个继承自 `HashMap<K, V>` 的自定义类。
2. 覆盖 `put(K key, V value)` 和 `putAll(Map<? extends K, ? extends V> m)` 方法。
3. 在这些方法中检测值是否为 `Timestamp` 类型。
4. 如果是,则将其转换为指定的日期时间格式字符串。
#### 示例代码
以下是一个完整的示例代码片段:
```java
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.HashMap;
public class CustomFormattedMap<K, V> extends HashMap<K, V> {
private static final long serialVersionUID = 1L;
private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public CustomFormattedMap() {
super();
}
@Override
public V put(K key, V value) {
if (value instanceof Timestamp) {
SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
String formattedValue = sdf.format(((Timestamp) value).getTime());
return super.put(key, (V) formattedValue);
}
return super.put(key, value);
}
@Override
public void putAll(java.util.Map<? extends K, ? extends V> m) {
for (java.util.Map.Entry<? extends K, ? extends V> entry : m.entrySet()) {
this.put(entry.getKey(), entry.getValue());
}
}
}
```
#### 测试代码
下面展示如何测试该功能:
```java
import java.sql.Timestamp;
public class Main {
public static void main(String[] args) {
CustomFormattedMap<String, Object> customMap = new CustomFormattedMap<>();
// 添加不同类型的键值对
customMap.put("timestampKey", new Timestamp(System.currentTimeMillis()));
customMap.put("stringKey", "This is a string");
customMap.put("integerKey", 123);
// 输出结果
System.out.println(customMap.get("timestampKey")); // 格式化的日期时间字符串
System.out.println(customMap.get("stringKey")); // 原始字符串
System.out.println(customMap.get("integerKey")); // 原始整数值
}
}
```
运行以上代码后,`customMap.get("timestampKey")` 返回的结果将是按照 `"yyyy-MM-dd HH:mm:ss"` 格式化后的字符串[^1]。
---
### 注意事项
- **线程安全性**:如果需要在线程安全环境下使用此 `CustomFormattedMap`,可以考虑基于 `ConcurrentHashMap` 进行扩展。
- **性能影响**:每次调用 `put` 或 `putAll` 都会增加额外的判断逻辑,可能会稍微降低性能。但在大多数场景下,这种开销是可以接受的。
- **异常处理**:对于无法解析的时间戳或其他特殊情况,可以根据需求决定抛出异常或记录日志。
---
阅读全文
相关推荐



















