求Android Studio 3.0中日期格式转换代码片段(含带时间场景)
Android Studio 3.0 日期格式转换方案
针对你提到的两种日期字符串转换需求,我整理了对应的代码片段,同时附上关键注意事项:
1. 转换"2018-04-20"为"20 April, 2018"
这里需要用SimpleDateFormat定义输入和输出格式,重点要指定英文Locale,避免月份显示为中文:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class DateUtils { public static String convertShortDate(String inputDate) { // 输入格式:yyyy-MM-dd SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); // 输出格式:dd MMMM, yyyy SimpleDateFormat outputFormat = new SimpleDateFormat("dd MMMM, yyyy", Locale.ENGLISH); try { Date date = inputFormat.parse(inputDate); return outputFormat.format(date); } catch (ParseException e) { e.printStackTrace(); // 转换失败时返回原字符串或自定义提示 return inputDate; } } } // 使用示例 String originalDate = "2018-04-20"; String formattedDate = DateUtils.convertShortDate(originalDate); // 输出结果:20 April, 2018
2. 处理带时间的日期字符串"2018-04-20 12:30:00"
根据需求不同,分为两种处理方式:
2.1 保留时间的转换(比如转成"20 April, 2018 12:30 PM")
public static String convertDateTime(String inputDateTime) { // 输入格式:yyyy-MM-dd HH:mm:ss SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH); // 输出格式:dd MMMM, yyyy hh:mm a(12小时制带AM/PM) SimpleDateFormat outputFormat = new SimpleDateFormat("dd MMMM, yyyy hh:mm a", Locale.ENGLISH); try { Date date = inputFormat.parse(inputDateTime); return outputFormat.format(date); } catch (ParseException e) { e.printStackTrace(); return inputDateTime; } } // 使用示例 String originalDateTime = "2018-04-20 12:30:00"; String formattedDateTime = DateUtils.convertDateTime(originalDateTime); // 输出结果:20 April, 2018 12:30 PM
2.2 只提取日期部分(转成"20 April, 2018")
只需调整输入格式适配带时间的字符串,输出格式和第一种情况一致:
public static String extractDateFromDateTime(String inputDateTime) { SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH); SimpleDateFormat outputFormat = new SimpleDateFormat("dd MMMM, yyyy", Locale.ENGLISH); try { Date date = inputFormat.parse(inputDateTime); return outputFormat.format(date); } catch (ParseException e) { e.printStackTrace(); return inputDateTime; } }
关键注意事项
- Locale设置:必须指定
Locale.ENGLISH,否则月份名称会跟随系统语言显示(比如中文环境下会显示"四月")。 - 线程安全:
SimpleDateFormat不是线程安全的,不要将其声明为静态变量在多线程环境中使用,建议每次调用时创建实例,或者用ThreadLocal封装。 - 异常处理:一定要捕获
ParseException,避免因输入字符串格式错误导致崩溃。
内容的提问来源于stack exchange,提问作者Waqas
相关产品推荐
相关产品推荐

