SimpleDateFormat注意事项

本文介绍了如何使用Java中的SimpleDateFormat类来格式化日期时间。分别展示了12小时制和24小时制的时间格式化方法,并提供了具体的代码示例。

在使用SimpleDateFormat时格式化时间的 yyyy.MM.dd 为年月日而如果希望格式化时间为12小时制的,则使用hh:mm:ss 如果希望格式化时间为24小时制的,则使用HH:mm:ss

Date d = new Date();
		SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小时制
		System.out.println(ss.format(d));

		Date date = new Date();
		SimpleDateFormat sdformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制
		String LgTime = sdformat.format(date);
		System.out.println(LgTime);


结果为
2008-05-28 01:32:54
2008-05-28 13:32:54

   Date类,已经很少用了。更多使用的是Calendar   
  Calendar    date    =    Calendar.getInstance();   
   date.get(Calendar.HOUR_OF_DAY    );//得到24小时机制的   
   date.get(Calendar.HOUR);//    得到12小时机制的       

在进行三方接口对接时,尤其是基于Java开发的企业级应用中,需要注意多个方面以确保系统的稳定性、安全性、可维护性和性能。以下是常见的注意事项及其原因解释: --- ### 1. **明确接口文档** - **问题原因**:三方接口通常由外部团队或公司提供,若文档不清晰(如参数说明、返回格式、错误码等),极易导致对接失败。 - **解决方法**: - 要求对方提供完整的 API 文档(Swagger、Postman 集合、PDF 等)。 - 明确请求方式(GET/POST)、Content-Type(application/json、application/x-www-form-urlencoded)、鉴权方式等。 - 对关键字段的数据类型、长度、是否必填进行确认。 --- ### 2. **统一编码与数据格式** - **问题原因**:中文乱码、JSON 解析失败等问题常因编码不一致(如 UTF-8 vs ISO-8859-1)或数据格式差异引起。 - **解决方法**: - 所有请求和响应都应使用 UTF-8 编码。 - 使用标准 JSON 处理库(如 Jackson 或 Gson)解析响应体。 - 对日期格式(如 `yyyy-MM-dd HH:mm:ss`)提前协商并做统一转换。 ```java // 示例:使用 Jackson 解析 JSON 响应 ObjectMapper mapper = new ObjectMapper(); mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); ApiResult result = mapper.readValue(responseBody, ApiResult.class); ``` --- ### 3. **设置合理的超时时间** - **问题原因**:网络延迟或服务不可用可能导致线程阻塞,进而影响整个系统性能。 - **解决方法**: - 设置连接超时(connect timeout)和读取超时(read timeout),避免无限等待。 - 推荐值:连接 5 秒,读取 10~30 秒,根据业务场景调整。 ```java // 使用 HttpURLConnection 设置超时 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); // 5秒连接超时 conn.setReadTimeout(10000); // 10秒读取超时 ``` --- ### 4. **异常处理与重试机制** - **问题原因**:网络抖动、服务临时不可用等情况常见,需具备容错能力。 - **解决方法**: - 捕获 `IOException`、`SocketTimeoutException` 等网络异常。 - 实现指数退避重试策略(最多 2~3 次)。 - 记录详细日志便于排查。 ```java int maxRetries = 3; long backoff = 1000; // 初始延迟1秒 for (int i = 0; i < maxRetries; i++) { try { String response = callThirdPartyApi(); if (response != null) break; } catch (SocketTimeoutException e) { if (i == maxRetries - 1) throw e; Thread.sleep(backoff); backoff *= 2; // 指数退避 } } ``` --- ### 5. **安全认证与签名机制** - **问题原因**:第三方接口常要求身份验证,防止非法调用。 - **解决方法**: - 支持 OAuth2、API Key、HMAC 签名等方式。 - 敏感信息(如密钥)不得硬编码,应从配置中心获取。 - 请求头中添加认证信息。 ```java // 示例:添加 API Key 到请求头 conn.setRequestProperty("Authorization", "Bearer " + apiKey); conn.setRequestProperty("X-API-Key", secretKey); ``` --- ### 6. **日志记录与监控告警** - **问题原因**:生产环境出错后难以追溯,影响故障定位。 - **解决方法**: - 记录完整请求 URL、参数、响应结果、耗时、状态码。 - 使用 AOP 或拦截器统一打日志。 - 集成 Prometheus、ELK 或 SkyWalking 做链路追踪。 ```java log.info("调用三方接口: url={}, req={}, resp={}, cost={}ms", url, requestJson, responseJson, System.currentTimeMillis() - start); ``` --- ### 7. **幂等性设计与重复调用防范** - **问题原因**:重试可能导致重复下单、扣款等严重后果。 - **解决方法**: - 要求三方接口支持幂等(如通过 `requestId` 唯一标识请求)。 - 本地缓存已发送的 requestId,防止重复提交。 ```java String requestId = UUID.randomUUID().toString(); if (requestIdCache.contains(requestId)) { throw new IllegalArgumentException("重复请求"); } requestIdCache.add(requestId); ``` --- ### 8. **降级与熔断机制** - **问题原因**:当第三方服务宕机时,不能拖垮主业务流程。 - **解决方法**: - 使用 Hystrix 或 Sentinel 实现熔断降级。 - 提供默认值或本地缓存数据作为兜底方案。 ```java // Sentinel 示例:定义资源并设置规则 @SentinelResource(value = "thirdPartyCall", blockHandler = "fallback") public String callApi() { return httpUtil.post("/api/third"); } public String fallback(BlockException ex) { return "default_value"; } ``` --- ### 9. **HTTPS 与证书管理** - **问题原因**:HTTP 明文传输风险高;自签名证书会导致 SSL 握手失败。 - **解决方法**: - 强制使用 HTTPS。 - 若对方使用自签证书,需将 CA 导入 JVM 的 truststore。 - 可通过 `-Djavax.net.ssl.trustStore=` 指定信任库。 --- ### 10. **版本兼容与变更通知** - **问题原因**:三方接口升级可能导致字段删除或行为变化。 - **解决方法**: - 关注对方发布的变更通知邮件或 Webhook。 - 尽量使用稳定版接口路径(如 `/v1/xxx` 而非 `/latest/xxx`)。 - 在测试环境先行验证更新。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值