Android中如何获取27-mar-2018格式的系统当前日期?
解决Android日期格式化问题:获取dd-MMM-yyyy格式日期
我来帮你搞定这个日期格式化的问题~你遇到的问题核心是用错了日期模式字符,还可能没注意Locale的设置,导致结果完全不符合预期。
为什么之前出错?
- 你尝试的
dd-mon-yyyy里,mon并不是Android/Java日期格式化的合法模式字符,所以系统会提示格式不支持。 - 你得到的
27-012-2018应该是误用了其他模式(比如重复的M或错误占位符),导致月份被解析成了数字形式。
正确的解决方法
要得到27-Mar-2018这种格式,正确的模式是dd-MMM-yyyy,同时必须指定英文Locale(避免系统语言影响月份缩写)。下面分两种常用场景给出代码:
场景1:兼容Android 7.0及以下(使用SimpleDateFormat)
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import android.os.Bundle; import android.util.Log; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取当前日期 Date currentDate = new Date(); // 初始化格式化器,指定格式和英文Locale SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH); // 格式化日期 String formattedDate = dateFormatter.format(currentDate); // 打印或使用格式化后的日期 Log.d("FormattedDate", formattedDate); // 输出示例:27-Mar-2018 } }
场景2:Android 8.0及以上(推荐使用java.time API)
Android 8.0开始支持Java 8的时间API,这个API更安全、易维护:
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Locale; import android.os.Bundle; import android.util.Log; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取当前本地日期 LocalDate currentDate = LocalDate.now(); // 初始化格式化器,指定格式和英文Locale DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.ENGLISH); // 格式化日期 String formattedDate = currentDate.format(formatter); Log.d("FormattedDate", formattedDate); // 输出示例:27-Mar-2018 } }
关键注意点
- 必须指定Locale.ENGLISH:如果不指定,当系统语言为非英文时,月份缩写会变成对应语言的形式(比如中文会显示"三月"),达不到你要的英文缩写效果。
- 模式字符区分大小写:
MMM代表三个字母的月份缩写,MM是两位数字月份,M是1-2位数字月份,一定要区分清楚。
内容的提问来源于stack exchange,提问作者Shivam Tiwari
相关产品推荐
相关产品推荐

