Date Timestamp SimpleDateFormat之间的转换

本文介绍了如何使用SimpleDateFormat类将日期转换为指定格式的字符串,并演示了如何进一步将Date对象转换为Timestamp对象,反之亦然。此外,还提供了将Timestamp转换为Date的具体方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、SimpleDateFormat的使用:

SimpleDateFormat可以把时间格式转换成任意形式,可以精确到毫秒:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:ss:mm:sss");
  String st = sdf.format(date);

这样的话输出的就是24小时精确到毫秒的时间,HH换成小写,就是12小时制度的。
  2、用以上办法,也就可以把date类型的数据转为String类型。

3、有了上面的方法把date类型转换成Timestemp也就简单多了,

在这里也就date.getTime()方法,返回的是long型的数据,而Timestamp里面的参数就是long型的,所以可以进行如下操作:

Timestamp ts = new Timestamp(new Date().getTime());
  System.out.println(ts.toString());

4、同样的把Timestamp 转换成Date也可以用long型作为中间量

long ste = ts.getTime();
  Date te = new Date(ste);

 

<think>好的,用户想了解如何使用SimpleDateFormat处理时间戳,并提供一个示例。首先,我需要回忆一下SimpleDateFormat的基本用法,以及如何处理时间戳。时间戳通常指的是自1970年1月1日以来的毫秒数,比如System.currentTimeMillis()返回的值。 首先,用户需要将时间戳转换Date对象,因为SimpleDateFormat主要用于格式化和解析Date对象。所以步骤应该是先创建一个Date实例,传入时间戳,然后使用SimpleDateFormat来格式化这个Date对象。例如: long timestamp = System.currentTimeMillis(); Date date = new Date(timestamp); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = sdf.format(date); 这样就能得到格式化的字符串了。但用户可能需要更详细的示例,包括不同的模式,比如包含毫秒的情况。注意到引用[1]中的例子用了"yyyy.MM.dd HH:mm:ss:sss",这里需要注意的是,sss代表毫秒,但通常格式中的模式字母是重复的,比如SSS表示毫秒。可能用户提供的引用中有笔误,应该用SSS而不是sss。所以正确的模式应该是"yyyy.MM.dd HH:mm:ss:SSS",这样会正确显示毫秒部分。 另外,用户可能想知道如何将格式化后的字符串再转换回时间戳。这时候需要使用parse方法,将字符串解析为Date对象,再获取其时间戳。不过要注意时区的问题,因为SimpleDateFormat默认使用系统时区,如果时间字符串的时区与系统不同,可能会导致解析错误。引用[3]中提到时区的问题,可能需要设置正确的时区给SimpleDateFormat实例,比如sdf.setTimeZone(TimeZone.getTimeZone("GMT"))。 还需要提醒用户,SimpleDateFormat是非线程安全的,如果在多线程环境下使用,需要采取同步措施或使用ThreadLocal。此外,Java 8以后推荐使用DateTimeFormatter和新的时间API,如Instant、LocalDateTime等,这些类是不可变且线程安全的。引用[2]中提到了LocalDateTime的转换方法,可以作为补充内容,但用户的问题主要针对SimpleDateFormat,所以可能需要简要提及。 接下来,需要检查用户提供的引用是否正确。引用[1]中的SimpleDateFormat例子确实展示了如何定义格式,包括毫秒部分,但模式中的sss可能应改为SSS。引用[2]和[3]涉及其他时间类型的转换和时区处理,虽然用户的问题是关于SimpleDateFormat,但这些引用可能在某些情况下相关,比如处理不同时区的时间戳时需要调整时区设置。 最后,生成相关问题时,需要考虑用户可能进一步想了解的内容,比如如何处理时区、SimpleDateFormat的线程安全问题、与其他时间类的比较等。因此,相关问题可以包括时区设置、线程安全注意事项、与新的时间API对比等。</think>### Java SimpleDateFormat 格式化时间戳示例 #### 1. 基础用法 时间戳通常指从 `1970-01-01 00:00:00 UTC` 开始的毫秒数(例如 `System.currentTimeMillis()` 的返回值)。使用 `SimpleDateFormat` 需遵循以下步骤: 1. 创建 `SimpleDateFormat` 实例并指定格式模式 2. 将时间戳转换为 `Date` 对象 3. 调用 `format()` 方法格式化时间 **示例代码**: ```java long timestamp = System.currentTimeMillis(); Date date = new Date(timestamp); // 时间戳Date对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); String formattedTime = sdf.format(date); // 输出如:2023-08-15 14:30:45:789 ``` #### 2. 包含时区信息 若需显示时区,可添加模式字符 `z` 或 `Z`: ```java SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS Z"); // 输出如:2023/08/15 14:30:45.789 +0800 ``` #### 3. 字符串时间戳 反向操作时需注意时区一致性: ```java String timeStr = "2023.08.15 14:30:45:789"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss:SSS"); Date parsedDate = sdf.parse(timeStr); // 字符串Date long newTimestamp = parsedDate.getTime(); // 获取时间戳 ``` #### 4. 关键注意事项 - **线程安全**:`SimpleDateFormat` 非线程安全,多线程环境下需配合 `ThreadLocal` 使用[^1] - **时区处理**:默认使用系统时区,可通过 `sdf.setTimeZone(TimeZone.getTimeZone("GMT"))` 修改 - **毫秒显示**:必须使用大写 `SSS` 表示毫秒,小写 `sss` 会导致格式错误[^1] #### 5. 替代方案(Java 8+) 推荐使用 `DateTimeFormatter` 替代方案: ```java Instant instant = Instant.ofEpochMilli(timestamp); DateTimeFormatter formatter = DateTimeFormatter .ofPattern("yyyy-MM-dd HH:mm:ss:SSS") .withZone(ZoneId.systemDefault()); String formatted = formatter.format(instant); // 线程安全且更精确[^2] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值