Java计算两个日期的时间差:XX天XX小时XX分钟XX秒

本文介绍了一种使用Java计算两个日期之间的时间差的方法,包括天数、小时数、分钟数和秒数。通过将时间差转换为毫秒,并利用简单的数学运算来计算各个单位的时间差。
public static void main(String[] args) throws ParseException {
	Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-01-01 00:00:01");
	Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-01-03 00:00:00");

	// 相差的毫秒值
	Long milliseconds = endDate.getTime() - startDate.getTime();

	long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
	long nh = 1000 * 60 * 60;// 一小时的毫秒数
	long nm = 1000 * 60;// 一分钟的毫秒数
	long ns = 1000;// 一秒钟的毫秒数

	long day = milliseconds / nd; // 计算相差多少天
	long hour = milliseconds % nd / nh; // 计算相差剩余多少小时
	long min = milliseconds % nd % nh / nm; // 计算相差剩余多少分钟
	long sec = milliseconds % nd % nh % nm / ns; // 计算相差剩余多少秒
	System.out.println("时间相差:" + day + "天" + hour + "小时" + min + "分钟" + sec + "秒");
	// 时间相差:1天23小时59分钟59秒

	long hourAll = milliseconds / nh; // 计算相差多少小时
	System.out.println("时间相差:" + hourAll + "小时" + min + "分钟" + sec + "秒");
	// 时间相差:47小时59分钟59秒

	long min2 = milliseconds / nm; // 计算相差多少分钟
	System.out.println("时间相差:" + min2 + "分钟" + sec + "秒");
	// 时间相差:2879分钟59秒
}

 

<think>我们正在讨论Java中字符串拼接的问题。根据用户需求,用户希望将多个String字符串按照“xx,xx,xx”的形式进行拼接,即用逗号隔每个字符串,并且整个结果是一个字符串。 根据之前的引用,我们知道直接使用字符串拼接(使用+)在循环中效率很低,因为每次拼接都会创建新的StringBuilder和String对象。而使用StringBuilder可以显著提高性能。 因此,我们可以使用StringBuilder来构建字符串,并在每个字符串之间添加逗号隔符。但是要注意,最后一个字符串后面不应该有逗号。 常见的方法有: 1. 使用循环,对于每个字符串,先添加该字符串,然后如果不是最后一个,则添加逗号。 2. 使用Java 8及以上版本的String.join()方法,这是最简洁的方式。 3. 使用第三方库,如Apache Commons Lang中的StringUtils.join()。 由于用户没有指定Java版本,但考虑到引用中提到了StringBuilder,我们先给出使用StringBuilder的方法,然后再给出使用String.join()的方法(如果用户使用的是Java8及以上)。 但是,用户要求的形式是“xx,xx,xx”,也就是用逗号连接,所以我们直接使用String.join()是最简单的。 然而,根据引用[3],用户可能已经看过使用StringBuilder的示例,所以我们也要提供这种方法。 因此,我们可以提供两种方法: 方法一:使用StringBuilder(适用于所有Java版本) 方法二:使用String.join(Java8及以上) 另外,用户引用[1]中的代码示例展示了直接拼接字符串和StringBuilder的性能差距,因此我们应强调使用StringBuilder的好处。 同,用户引用[2][3]也提到了字符串拼接的问题,所以我们可以综合这些来回答。 我们还需要注意,如果字符串列表为空,我们应该避免出现多余的逗号。 步骤: 1. 创建一个StringBuilder对象。 2. 遍历字符串集合(或数组)。 3. 对于每个字符串,将其追加到StringBuilder。 4. 如果不是最后一个元素,追加一个逗号。 或者使用String.join(),它内部也是使用StringBuilder,但代码更简洁。 因此,我们可以这样回答: 在Java中,将多个字符串按照逗号隔的形式拼接,可以使用以下两种常用方法: 方法1(Java 8及以上推荐):使用String.join方法 方法2(适用于所有Java版本):使用StringBuilder 下面给出具体代码示例。 </think>根据您的需求,在Java中将多个字符串按“xx,xx,xx”格式拼接,推荐以下高效可靠的方法: ### ✅ 推荐方法一:String.join()(Java 8+) ```java List<String> list = Arrays.asList("apple", "banana", "cherry"); String result = String.join(",", list); // 输出 "apple,banana,cherry" ``` **优势**: - 单行代码实现,语法简洁 - 内部使用`StringJoiner`优化拼接效率[^1] - 自动处理隔符位置 ### ✅ 推荐方法二:StringBuilder(通用版本) ```java List<String> list = Arrays.asList("Java", "Python", "C++"); StringBuilder sb = new StringBuilder(); for (int i = 0; i < list.size(); i++) { sb.append(list.get(i)); if (i < list.size() - 1) { sb.append(","); // 避免末尾添加多余隔符 } } String result = sb.toString(); // 输出 "Java,Python,C++" ``` **优势**: - 适用于所有Java版本 - 避免`+`拼接导致的性能问题(每次`+`隐含创建新对象)[^1] - 时间复杂度降至$O(n)$(直接拼接为$O(n^2)$)[^3] ### ✅ 推荐方法三:StringJoiner(Java 8+) ```java StringJoiner joiner = new StringJoiner(","); joiner.add("cat").add("dog").add("fish"); String result = joiner.toString(); // 输出 "cat,dog,fish" ``` **优势**: - 支持前缀/后缀(如`new StringJoiner(",", "[", "]")`→`[xx,xx]`) - 线程安全设计 --- ### ⚠️ 避免直接拼接(性能陷阱) ```java // 禁止在循环中使用+拼接(性能极差) String result = ""; for (String s : list) { result += s + ","; // 每次循环创建新StringBuilder和String[^1] } result = result.substring(0, result.length()-1); // 需额外处理末尾逗号 ``` **问题**: - 每次循环创建临对象,内存开销大 - 10万次拼接耗约5 vs StringBuilder的8毫[^1] --- ### ✨ 最佳实践建议 1. **Java 8+** → 优先使用`String.join()`或`StringJoiner` 2. **旧版本Java** → 使用`StringBuilder`手动控制拼接 3. **空值处理** → 使用`Objects.toString(s, "")`避免NullPointerException 4. **集合转换** → 直接支持List/Set,数组需用`String.join(",", array)` > 通过StringBuilder或String.join方法拼接字符串,相比直接使用+操作符可提升数百倍性能[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值