数仓面试|四个在工作后才知道的SQL密技
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数仓面试|四个在工作后才知道的SQL密技相关的知识,希望对你有一定的参考价值。
Date类(日期类)、DateFormat类(对日期类转换为文本)、Calendar类(日历类)--常用类
类Date,表示特定的瞬间,精确到毫秒。
1000毫秒 = 1秒
日期和毫秒可以相互转换
日期-->毫秒:从1970年1月1日00:00:00到当前日期,一共经历了多少毫秒
毫秒-->日期:1天 = 24 x 60 x 60 = 86400秒 = 86400 x 1000 = 86400000毫秒
构造方法:
public Date()//生成当前系统到1970年1月1日00:00:00之间的毫秒数----生成当前系统的时间
public Date(long date)//生成从1970年1月1日00:00:00,过了date参数毫秒的时间对象---生成特定时间,注意date类型为long
常用成员方法:
public long getTime()//返回自1970年1月1日00:00:00的毫秒数
DateFormat类---对日期进行格式化
java.text public abstract class DateFormat extends Format 是日期/时间格式的子类的抽象父类
作用:格式化(即,日期→文本),解析(文本→日期)
成员方法:
public final String format(Date date)//将日期转化为字符串
public Date parse(String source)//将字符串解析为日期
DateFormat类为一个抽象类,无法创建对象使用,需用到它的实现子类SimpleDateFormat
SimpleDateFormat类extends DateFormat
java.text.SimpleDateFormat extends DateFormat
构造方法:
public SimpleDateFormat(String pattern)
/*使用给定的模式和默认的默认日期格式来创建SimpleDateFormat 对象
参数:pattern 传递指定的日期格式
格式:区分大小写
y 年
M 月
d 日
H 时
m 分
s 秒
对应的格式,会把格式替换成对应的日期和时间
"yyyy-MM--dd HH:mm:ss"
注意:模式中的字母不可更改,但连接符可更改
"yyyy年MM月dd日 HH时mm分ss秒" 也行
*/
用父类DateFormat 中方法来讲文本和日期之间相互转化
public final String format(Date date)//将日期转化为字符串
public Date parse(String source)//将字符串解析为日期
package commonclass;
import java.text.FieldPosition;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestSimpleDateFormat01 {
public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
String format = simpleDateFormat.format(new Date());
System.out.println(format);
Date parse = simpleDateFormat.parse("2020年08月08日17时01分53秒");//这儿的source格式必须与“yyyy年MM月dd日HH时mm分ss秒”格式相对应,否则会抛出ParseException
System.out.println(parse);
}
}
练习:
package commonclass;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
//计算一个人出生了多少天
/*思路
* 1.计算当前时间的毫秒数
* 2.计算出生时间的毫秒数
* 3.两者相减,再/1000/60/60/24*/
public class PracticeSimpleDateFormat01 {
public static void main(String[] args) throws ParseException {
Date date = new Date();//1.当前时间毫秒数
System.out.println(date.getTime());
//2.计算出生时间的毫秒数
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入出生年月日,yyyy年MM月dd日HH时mm分ss秒");
String strDate = scanner.next();
Date birth = simpleDateFormat.parse(strDate);
System.out.println(birth.getTime());
int days = (int) ((date.getTime() - birth.getTime())/1000/60/60/24);
System.out.println("你从出生到现在共活了"+days+"天");
}
}
Calendar类---日历类
java.until.Calendar类是一个抽象类,里面提供了许多操作日历字段的方法(如YEAR , MONTH , DAY_OF_MONTH , HOUR )
由于calendar类是一个抽象类,无法直接创建对象
但calendar类里面有一个静态方法,public static Calendar getInstance(),可以直接创建calendar类的子类对象。
Calendar类中常用的成员方法
public int get(int field)//返回给定的日历字段的值
public void set(int field, int value)//设置特定的日历字段值
public final void set(int year, int month, int date)//设置日历的年、月、日
abstract public void add(int field, int amount)//加上或减去指定的时间到指定日历字段,amount可以是正负
public final Date getTime()//将日历对象转换为日期对象
/*参数:field
是Calendar类中的静态成员变量
比如 public final static int YEAR = 1;
public final static int MONTH = 2;
public final static int DATE = 5;
等等等,有好多,可以在Calendar类中查找
*/
package commonclass;
import java.util.Calendar;
import java.util.Date;
public class TestCalendar01 {
public static void main(String[] args) {
//生成calendar对象
Calendar c = Calendar.getInstance();
//设置calendar字段
c.set(Calendar.YEAR,2000);
//增加或减少calendar指定字段的值
c.add(Calendar.MONTH,-1);//西方月份0-11月,东方月份1-12月
System.out.println(c);//java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2000,MONTH=6,WEEK_OF_YEAR=33,WEEK_OF_MONTH=2,DAY_OF_MONTH=8,DAY_OF_YEAR=221,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=9,HOUR_OF_DAY=21,MINUTE=22,SECOND=45,MILLISECOND=446,ZONE_OFFSET=28800000,DST_OFFSET=0]
//将日历对象转化为日期对象
Date date = c.getTime();
System.out.println(date);//Sat Jul 08 21:22:45 CST 2000
}
}
以上是关于数仓面试|四个在工作后才知道的SQL密技的主要内容,如果未能解决你的问题,请参考以下文章