Android 中用到的日期格式化和 Java 中一样的一般需求都是将当前日期或者后台传来的时间戳转化为格式化的字符串, 整理如下:
一将字符串转化成 Date
- String test = new String("2018/03/01");
- SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd/hh 点 mm 分");
- try {
- Log.e("test",sdf1.parse(test).toString());
- } catch (ParseException e) {
- e.printStackTrace();
- Log.e("test",e.toString());
- }
运行后报错 java.text.ParseException: Unparseable date: "2018/03/01" 此操作需要给定的字符串和格式对应, 否则就会解析异常将 test 改为 2018/03/01/11/32 测试仍会报同样异常, 此处不再举其他错误例子也就是说除了数字和字母对应之外, 其余的年月日和连接符也要对应才可以正常解析解析出来的是一个 Date 对象
二将 Date 对象转化为格式化的字符串
- Date date = new Date();
- Log.e("test",sdf1.format(date));//E/test: 2018/03/01/11 点 40 分
在这里说一下 DateDate 是 JDK1.0 就有的类, 代表了精确到毫秒的时间的实例, 默认的构造方法传递的是系统当前的毫秒值, System.currentTimeMillis() 这个时间有可能不够精确, 详情可以参阅关于闰秒和 GMT/UT 的文档也可以在构造时传入指定的毫秒值还有几个在 JDK1.1 后废弃的构造方法, 分别是传入指定的年月日日分秒或者字符串然后解析格式化, 但这几个方法在国际化时会有问题, 因此 Java 分别在 Calendar 中转化日期和时间并在 DateFormat 中转化日期和字符串 Calendar.set(year + 1900, month, date) or GregorianCalendar(year + 1900, month, date);DateFormat.parse(String s) 是相应的替代方法
三 TimeStamp
TimeStamp extends java.util.Date, 构造器传入的是一个毫秒值由于是 Date 的子类, 它也可以通过 DateFormat 来格式化成指定的字符串 Date 也可以调用 getTime() 获得毫秒值 TimeStamp 有一个静态方法 valueOf(String str) 可以将字符串转为 TimeStamp 对象, 不过这个方法要求传入指定格式的字符串
此外在项目中还有一个问题是 Java 中的时间戳即 Syste.currentTimeMillis() 返回的是 13 位的 long 型数据, 而服务端收发的一般是十位的时间戳, 注意转型的问题
来源: http://www.bubuko.com/infodetail-2511506.html