new Date()国际化业务中创建时间异常,相差一天

做国际化需求时,使用了new Date(time) 生成时间,发现了以下问题

从2张图中可以看出,使用'2020-03-20'这个日期生成的北京时间和巴西时间不在同一天

原因:new Date('2020-xx-xx') 生成时间时默认在零点,但是以GMT标准计算,换算成北京本地时间就是8点,换算成巴西本地时间就是前一天21点

由于以上原因,使用new Date('2020-xx-xx') 生成时间会存在问题。

解决方式:使用new Date('2020/03/20')

创建时间时,以本地时间为基准,这样解决了根据特定日期生成时间时保证了在同一天。

 

### 使用 `s:date` 计算两个日期之间相差的月份数 在 Java 中,如果想要利用 `SimpleDateFormat` 和其他辅助工具来计算两个日期之间的月份差异,可以采用多种方法。一种常见的方式是通过解析字符串形式的日期到 `java.util.Date` 对象再进一步处理。 对于更精确地获取两日期间的月份数量,推荐使用 `java.time.temporal.ChronoUnit.MONTHS.between()` 方法(适用于Java 8及以上版本),这能更好地应对不同长度月份带来的复杂情况[^4]。然而,在较低版本环境中,则可能依赖于手动逻辑实现: ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; public class MonthDifference { private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public static int getMonthDifference(String startDateStr, String endDateStr) throws ParseException { Calendar startCal = Calendar.getInstance(); Calendar endCal = Calendar.getInstance(); startCal.setTime(sdf.parse(startDateStr)); endCal.setTime(sdf.parse(endEndDateStr)); int diffYear = endCal.get(Calendar.YEAR) - startCal.get(Calendar.YEAR); int diffMonth = diffYear * 12 + endCal.get(Calendar.MONTH) - startCal.get(Calendar.MONTH); // Adjust if the day of month makes a difference. if (endCal.get(Calendar.DAY_OF_MONTH) < startCal.get(Calendar.DAY_OF_MONTH)) { diffMonth--; } return Math.abs(diffMonth); } } ``` 此代码片段展示了如何定义一个名为 `getMonthDifference` 的静态方法用于接收起始和结束日期作为参数并返回它们间相隔的整个月数。注意这里假设输入格式为 `"yyyy-MM-dd"` 并进行了简单的调整以考虑当月具体哪一天的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值