如何获得一个字符串格式的时间

一个字符串时间格式化成固定格式一个常见的需求,在Java中通常会使用`SimpleDateFormat`(对于较老版本的API)或`DateTimeFormatter`(JDK 8及以后推荐使用的现代API)。下面是这两种方法的具体步骤和示例代码。 ### 使用 `SimpleDateFormat` 格式字符串时间 #### 步骤: 1. **导入必要的包**:确保你已经引入了`java.text.SimpleDateFormat`。 2. **创建 SimpleDateFormat 实例**:根据源时间和目标时间的不同格式初始化相应的`SimpleDateFormat`对象。 3. **解析原始字符串为日期对象**:利用`parse()`函数把输入的字符串转换为`Date`对象。 4. **再次格式化输出**:用另一个预设好的`SimpleDateFormat`实例对刚才得到的`Date`进行再格式化,最后转回字符串形式输出。 #### 示例代码: ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class FormatDateString { public static void main(String[] args) throws ParseException { // 假定这是从外部获取到的一个非标准格式时间String originalString = "Thu Oct 05 2023 14:30:00 GMT+0800"; // 创建 SimpleDateFormat 来解释这个时间串;注意这里的模式要与原字符串匹配 SimpleDateFormat sdfInput = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z"); sdfInput.setLenient(false); // 设置严格模式 // 解析给定字符串Date 类型的对象 Date dateObj = sdfInput.parse(originalString); // 接下来我们要将其转化为特定的目标格式,比如:"yyyy-MM-dd'T'HH:mm:ss" SimpleDateFormat sdfOutput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); // 再次格式化并打印出来 System.out.println(sdfOutput.format(dateObj)); } } ``` ### 使用 `DateTimeFormatter` 格式字符串时间 (推荐方式) 随着 Java 时间 API 的改进,现在官方建议优先选择基于`java.time.*`的一系列类来进行日期操作。特别是`LocalDateTime`, `LocalDate`, 和`LocalTime`等类型配合上`DateTimeFormatter`能够提供更好的性能以及更多的功能特性。 #### 步骤: 1. **确定数据范围**:首先明确你的起始时间为包含还是不含有时区信息,并据此选取合适的类型(`Instant`,`OffsetDateTime`,`ZonedDateTime`)。 2. **构建正确的 Pattern**:参考[文档](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html),构造出能准确表示原有时间和所需最终格式化的pattern。 3. **完成整个过程**:先将文本内容解析成为某种时间类型的实例,然后通过`.format()`生成新的标准化表达法。 #### 示例代码: ```java import java.time.OffsetDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; public class ModernFormatDateString { public static void main(String[] args) { try { // 设定原始未加工过的 ISO 8601 或其他格式时间戳记作为例子 String rawTimestamp = "2023-10-05T14:30:00+08:00"; // 定义输入格式(这里是以ISO_8601为例) DateTimeFormatter inputFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; // 解码该时间戳成为一个 OffsetDateTime 对象 OffsetDateTime odt = OffsetDateTime.parse(rawTimestamp, inputFormatter); // 规划好预期的结果样式 DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); // 执行实际的格式调整工作并将它变成字符串返回去 System.out.println(odt.format(outputFormatter)); } catch (DateTimeParseException e){ System.err.println("无法识别提供的日期格式!"); } } } ``` 这两个例子展示了如何将不同来源的字符串时间按照自定义的要求重新排列组合起来。无论是旧版API还是新版API都有各自的优势所在,请根据自己项目的具体情况选用最恰当的方式。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值