每日五题-Java面试题220903

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语句 使用的,它只包含日期而没有时间部分,一般在读写数据库的时候使用,PreparedStatementsetDate() 的参数和 ResultSetgetDate() 方法的都是 java.sql.Date
    • java.util.Date 是在除了 SQL 语句的情况下面使用,一般是日常日期字段。
    • java.util.Datejava.sql.Date 的父类,即:继承关系:java.lang.Object --> java.util.Date --> java.sql.Date

相互转化:

  1. java.sql.Date 转为 java.util.Date

    java.sql.Date date = new java.sql.Date();
    java.util.Date d = new java.util.Date(date.getTime());
    
  2. 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());

  3. .这里所有时间日期都可以被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 + "分钟";
}

源链接-掘金

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值