数据库中timestamp对应实体的查询和插入

Posted IT的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库中timestamp对应实体的查询和插入相关的知识,希望对你有一定的参考价值。

   @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date actualArrive;
   Date creationDate = TimeUtil.string2TimeStamp(TimeUtil.glzDateChangeString(create));
                rfcMap.put("creationDate", creationDate);

public class TimeUtil {
    private static Date date = new Date();
    private static Calendar calendar = Calendar.getInstance();
    private final static String DATE_PARSE_HOUR = "yyyy-MM-dd HH:mm:ss";
    private final static String ZONE_OFFSET = "+8";

    /**
     * string转时间戳
     *
     * @param str date
     * @return Date
     * @throws ParseException ParseException
     */
    public static Date string2TimeStamp(String str) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date2 = null;
        try {
            date2 = simpleDateFormat.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date2;
    }

    /**
     * string2Date
     *
     * @param str date
     * @return Date
     * @throws ParseException ParseException
     */
    public static Date string2Date(String str) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date2 = simpleDateFormat.parse(str);
        return date2;
    }

    /**
     * 获取当月开始时间
     *
     * @return 时间
     */
    public static String getBeginOfThisMonth() {
        calendar.setTime(date);
        int index = calendar.get(Calendar.DAY_OF_MONTH);
        calendar.add(Calendar.DATE, (1 - index));
        Date time = calendar.getTime();
        // 设置时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 格式化前一天
        String defaultStartDate = sdf.format(time);
        defaultStartDate = defaultStartDate + " 00:00:00";
        return defaultStartDate;
    }

    /**
     * 获取当月开始时间
     *
     * @return 时间
     */
    public static String getBeginOfThisWeek() {
        calendar.setTime(date);
        int index = calendar.get(Calendar.DAY_OF_WEEK);
        calendar.add(Calendar.DATE, (1 - index));
        Date time = calendar.getTime();
        // 设置时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 格式化前一天
        String defaultStartDate = sdf.format(time);
        defaultStartDate = defaultStartDate + " 00:00:00";
        return defaultStartDate;
    }

    /**
     * 获取当月开始时间
     *
     * @return 时间
     */
    public static String getBeginOfLastMonth() {
        calendar.add(Calendar.MONTH, -1);
        // 上月
        int lastMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59);

        // 按格式输出
        // 上月最后一天
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01  00:00:00");
        // 上月第一天
        String time = sdf2.format(calendar.getTime());
        return time;
    }

    /**
     * 获取当月开始时间
     *
     * @return 时间
     */
    public static String getNowOfLastMonth() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
        calendar.add(Calendar.MONTH, -1);
        // 上月
        String timeLast = sdf.format(calendar.getTime());
        int lastMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59);
        // 按格式输出
        // 上月第一天
        return timeLast;
    }

    /**
     * 获取当月开始时间
     *
     * @return 时间
     */
    public static Date getNowOfLastWeek() {
        Date dBefore = new Date();
        // 把当前时间赋给日历
        calendar.setTime(date);
        // 设置为7天前
        calendar.add(Calendar.DAY_OF_MONTH, -7);
        // 得到七天前的时间
        dBefore = calendar.getTime();
        return dBefore;
    }

    /**
     * 获取当月开始时间
     *
     * @return 时间
     */
    public static Date getBeginDayOfLastWeek() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (dayOfWeek == 1) {
            dayOfWeek += 7;
        }
        cal.add(Calendar.DATE, 1 - dayOfWeek - 7);
        return cal.getTime();
    }

    /**
     * 获取当月开始时间
     *
     * @return 时间
     */
    public static int getDayOfMonth() {
        Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
        int day = aCalendar.getActualMaximum(Calendar.DATE);
        return day;
    }

    /**
     * 获取当月开始时间
     *
     * @return 时间
     */
    public static int getPassDaysOfMonth() {
        calendar.setTime(date);
        int index = calendar.get(Calendar.DAY_OF_WEEK);
        calendar.add(Calendar.DATE, (1 - index));
        // 设置时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("dd");
        // 格式化前一天
        String defaultStartDate = sdf.format(date);
        defaultStartDate = defaultStartDate + "";
        int i;
        i = Integer.parseInt(defaultStartDate);
        return i;
    }

    /**
     * 想要得到几个月前的月份
     *
     * @param i i
     * @return String
     */
    public static String getBeginLastMonth(int i) {
        calendar.add(Calendar.MONTH, -i);
        // 上月
        int lastMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59);

        // 按格式输出
        // 上月最后一天
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01  00:00:00");
        // 上月第一天
        String time = sdf2.format(calendar.getTime());
        return time;
    }

    /**
     * 获取当月开始时间
     *
     * @param i i
     * @return 时间
     */
    public static String getEndLastMonth(int i) {
        calendar.add(Calendar.MONTH, -i);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
        // 上月
        int lastMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59);

        // 按格式输出
        // 上月最后一天
        String time = sdf.format(calendar.getTime());
        // 上月第一天
        return time;
    }

    /**
     * 获取当月开始时间
     *
     * @return 时间
     */
    public static int getNumOfMonth() {
        SimpleDateFormat sdf = new SimpleDateFormat("MM");
        String format = sdf.format(date);
        try {
            return Integer.parseInt(format);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 获取当月开始时间
     *
     * @param date date
     * @param day  day
     * @return 时间
     */
    public static Date rollDay(Date date, int day) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DAY_OF_MONTH, day);
        return cal.getTime();
    }

    /**
     * 获取当月开始时间
     *
     * @param date1 date1
     * @param date2 date2
     * @return 时间
     */
    public static int calcDayOffset(Date date1, Date date2) {
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(date1);

        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(date2);
        int day1 = cal1.get(Calendar.DAY_OF_YEAR);
        int day2 = cal2.get(Calendar.DAY_OF_YEAR);

        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        if (year1 != year2) { // 同一年
            int timeDistance = 0;
            for (int i = year1; i < year2; i++) {
                if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) { // 闰年
                    timeDistance += 366;
                } else { // 不是闰年
                    timeDistance += 365;
                }
            }
            return timeDistance + (day2 - day1);
        } else { // 不同年
            return day2 - day1;
        }
    }

    /**
     * 获取当月开始时间
     *
     * @param dateStr dateStr
     * @return 时间
     */
    public static Date stringToDate(String dateStr) {
        // 获得一个时间格式的字符串
        // 获得SimpleDateFormat类,我们转换为yyyy-MM-dd的时间格式
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            // 使用SimpleDateFormat的parse()方法生成Date
            date = sf.parse(dateStr);
            // 打印Date

        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 获取当月开始时间
     *
     * @param dateStr dateStr
     * @return 时间
     */
    public static Date stringToDatePrecise(String dateStr) {
        // 获得一个时间格式的字符串
        // 获得SimpleDateFormat类,我们转换为yyyy-MM-dd的时间格式
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            // 使用SimpleDateFormat的parse()方法生成Date
            date = sf.parse(dateStr);
            // 打印Date
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * date2 比 date1 大多数天
     *
     * @param date1 date1
     * @param date2 date2
     * @return days
     */
    public static int differentDaysByMillisecond(Date date1, Date date2) {
        return (int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
    }

    /**
     * date转string
     *
     * @param date date
     * @return String
     */
    public static String dateToString(Date date) {
        // 获得一个时间格式的字符串
        // 获得SimpleDateFormat类,我们转换为yyyy-MM-dd的时间格式
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sf.format(date);
    }

    /**
     * 获取指定月份的开始时间
     *
     * @param year  年
     * @param month 月
     * @return 时间
     */
    public static Date getBeginTime(int year, int month) {
        YearMonth yearMonth = YearMonth.of(year, month);
        LocalDate localDate = yearMonth.atDay(1);
        LocalDateTime startOfDay = localDate.atStartOfDay();
        ZonedDateTime zonedDateTime = startOfDay.atZone(ZoneId.of("Asia/Shanghai"));

        return Date.from(zonedDateTime.toInstant());
    }

    /**
     * 获取指定月份的结束时间
     *
     * @param year  年
     * @param month 月
     * @return 时间
     */
    public static Date getEndTime(int year, int month) {
        YearMonth yearMonth = YearMonth.of(year, month);
        LocalDate endOfMonth = yearMonth.atEndOfMonth();
        LocalDateTime localDateTime = endOfMonth.atTime(23, 59, 59, 999);
        ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));
        return Date.from(zonedDateTime.toInstant());
    }

    /**
     * 获取两个时间之间差多少分钟
     *
     * @param endDate endDate
     * @param nowDate nowDate
     * @return 分钟数
     */
    public static long getTwoDateMin(Date endDate, Date nowDate) {
        // 获得两个时间的毫秒时间差异
        long diff = endDate.getTime() - nowDate.getTime();
        // 计算差多少分钟
        long min = diff / 60 / 1000 + 1;
        // 计算差多少秒//输出结果
        return Math.abs(min);
    }

    /**
     * 获取当月开始时间
     *
     * @param date date
     * @param day  day
     * @return 时间
     */
    public static Date rollDayToNine(Date date, int day) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DAY_OF_MONTH, day);
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd 09:00:00");
        String format = sf.format(cal.getTime());
        SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            // 使用SimpleDateFormat的parse()方法生成Date
            date = sf2.parse(format);
            // 打印Date
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }


    /**
     * 获取当月开始时间
     *
     * @param plannedEnd plannedEnd
     * @return String
     * @throws ParseException
     */
    public static String glzDateChangeString(String plannedEnd) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd\\'T\\'HH:mm:ss");
        Date date2 = new Date();
        try {
            date2 = sdf.parse(plannedEnd);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        String formatDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date2);
        return formatDate;
    }

    /**
     * dateToStrLong
     *
     * @param dateDate plannedEnd
     * @return String
     */
    public static String dateToStrLong(Date dateDate) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = formatter.format(dateDate);
        return dateString;
    }


    /**
     * 对时间端的集合进行合并
     * 只要存在交集的进行合并并且合并次数加1
     *
     * @param arrayList List<Map<String, Object>>
     * @return List<Map < String, Object>>
     * @throws ApplicationException
     */
    public static List<Map<String, Object>> calucationTimeList(List<Map<String, Object>> arrayList)
            throws ApplicationException {
        if (!CollectionUtil.isNullOrEmpty(arrayList)) {
            for (int index = 0; index < arrayList.size(); index++) {
                Map<String, Object> objMap = arrayList.get(index);
                String startTime = (String) objMap.get("startTime");
                String endTime = (String) objMap.get("endTime");
                DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                LocalDateTime start = LocalDateTime.parse(startTime, df);
                LocalDateTime end = LocalDateTime.parse(endTime, df);
                for (int varIndex = 0; varIndex < arrayList.size(); varIndex++) {
                    String beginTime = (String) arrayList.get(varIndex).get("startTime");
                    String overTime = (String) arrayList.get(varIndex).get("endTime");
                    int num = Integer.parseInt(objMap.get("num").toString());
                    LocalDateTime begin = LocalDateTime.parse(beginTime, df);
                    LocalDateTime over = LocalDateTime.parse(overTime, df);
                    if (varIndex == index) {
                        continue;
                    } else if (start.isAfter(begin) && start.isBefore(over) && end.isAfter(over)) {
                        betweenStartAndEnd(startTime, beginTime, num, objMap, arrayList, varIndex);
                        return calucationTimeList(arrayList);
                    } else if (start.isBefore(begin) && end.isBefore(over) && end.isAfter(start)) {
                        // 前段时间开始时间在后段开始时间之前 前段结束时间在后段开始时间与结束时间之间
                        endTime = overTime;
                        num++;
                        objMap.put("endTime", endTime);
                        objMap.put("num", num);
                        arrayList.remove(varIndex);
                        return calucationTimeList(arrayList);
                    } else if (start.isAfter(begin) && end.isBefore(over)) {
                        // 前段时间整个包含在后段时间之间
                        startTime = beginTime;
                        endTime = overTime;
                        num++;
                        objMap.put("startTime", startTime);
                        objMap.put("endTime", endTime);
                        objMap.put("num", num);
                        arrayList.remove(varIndex);
                        return calucationTimeList(arrayList);
                    } else if (start.isBefore(begin) && end.isAfter(over)) {
                        // 后段时间整个包含在前段时间之间
                        num++;
                        objMap.put("num", num);
                        arrayList.remove(varIndex);
                        return calucationTimeList(arrayList);
                    }
                }
            }
        }
        return arrayList;
    }

    private static void betweenStartAndEnd(String startTime, String beginTime, int num,
        Map<String, Object> objMap, List<Map<String, Object>> arrayList,int varIndex) {
        // 前段时间开始时间在后段开始时间与结束时间之间 结束时间大于等于后段结束时间
        startTime = beginTime;
        num++;
        objMap.put("startTime", startTime);
        objMap.put("num", num);
        arrayList.remove(varIndex);
    }
}

以上是关于数据库中timestamp对应实体的查询和插入的主要内容,如果未能解决你的问题,请参考以下文章

mysql中时间dateTime怎么插入?

Hibernate HQL查询 插入 更新(update)实例

转: Hibernate HQL查询 插入 更新(update)实例

sqlserver数据库中为datetime类型,通过myeclipse逆向工程生成实体类中属性为啥是java.sql.Timestamp

插入新实体时,NSFetchResultsController 排序不起作用

Oracle数据库使用mybatis的时候,实体类日期为Date类型,mybatis里面定义的是Date类型,插入的时候,时分秒全部是12:00:00问题