文章目录
1、在多线程环境下,SimpleDateFormat 是线程安全的吗?
不是,非常不幸,DateFormat的所有实现,包括 SimpleDateFormat都不是线程安全的,因此你不应该在多线程程序中使用,除非是在对外线程安全的环境中使用,如将 SimpleDateFormat限制在 ThreadLocal 中。 如果你不这么做,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。因此,从日期、时间处理的所有实践来说,我强力推荐 joda-time 库。
2、Java中 如何格式化一个日期? 如格式为 ddMMyyyy的形式?
Java 中,可以使用 SimpleDateFormat 类或者 joda-time 库来格式日期。 DateFormat类允许你使用多种流行的格式来格式化日期。
-
当前日期yyyy-MM-dd格式化
//当前本地日期,没有时区 LocalDate date = LocalDate.now(); //时间日期格式化,表达式与熟知的一样 DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd"); //2018-11-29 String dateStr = fmt.print(date);
-
当前日期时间yyyy-MM–dd HH:mm:ss格式化
//当前日期时间,没有时区 LocalDateTime now = LocalDateTime.now(); //日期格式化,通用时间表达式 DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); //2018-11-29 08:08:24 String nowStr = fmt.print(now);
-
解析日期时间并使用系统时区(example: 2019-10-28 10:23:12 )
String dateStr = "2019-10-28 10:23:12"; //根据时间表达式生成DateTimeFormatter对象 DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); //2019-10-28T10:23:12.000+08:00 DateTime dateTime = fmt.parseDateTime(dateStr);
3、Java 中,怎么在格式化的日期中显示时区?
1.在格式化的最后加上Z,表示的就是时区!例如:String timestamp = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS Z”).format(new Date());
4、Java 中 java.util.Date 与 java.sql.Date 有什么区别?
- java.util.Date : 通常情况下用它获取当前时间或构造时间。
- java.sql.Date : 是针对SQL语句使用的,它只包含日期而没有时间部分。
区别:
- 共同点:
- 都有getTime方法返回毫秒数,可以直接构建
- 不同的点:
java.sql.Date
是针对 SQL语句 使用的,它只包含日期而没有时间部分,一般在读写数据库的时候使用,PreparedStatement
的setDate()
的参数和ResultSet
的getDate()
方法的都是java.sql.Date
java.util.Date
是在除了 SQL 语句的情况下面使用,一般是日常日期字段。java.util.Date
是java.sql.Date
的父类,即:继承关系:java.lang.Object
-->java.util.Date
-->java.sql.Date
相互转化:
-
java.sql.Date 转为 java.util.Date
java.sql.Date date = new java.sql.Date(); java.util.Date d = new java.util.Date(date.getTime());
-
java.util.Date 转为 java.sql.Date
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
java.sql.Time sTime = new java.sql.Time(utilDate.getTime());
java.sql.Timestamp stp = new java.sql.Timestamp(utilDate.getTime());
-
.这里所有时间日期都可以被SimpleDateFormat格式化
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); f.format(stp); f.format(sTime); f.format(sqlDate); f.format(utilDate); java.sql.Date sqlDate=java.sql.Date.valueOf("2005-12-12"); utilDate=new java.util.Date(sqlDate.getTime());
5、Java 中,如何计算两个日期之间的差距?
public static String getDatePoor(Date endDate, Date nowDate) {
longnd = 1000* 24* 60* 60;
longnh = 1000* 60* 60;
longnm = 1000* 60;
// long ns = 1000;
// 获得两个时间的毫秒时间差异
long diff = endDate.getTime() - nowDate.getTime();
// 计算差多少天
long day = diff / nd;
// 计算差多少小时
long hour = diff % nd / nh;
// 计算差多少分钟
long min = diff % nd % nh / nm;
// 计算差多少秒//输出结果
// long sec = diff % nd % nh % nm / ns;
return day + "天"+ hour + "小时"+ min + "分钟";
}