一些奇奇怪怪的日期工具类

项目由于在数据库设计层面,作了强制要求使用时间戳类型的日期类型,以便于不同国产数据库,mysql数据库之前保持良好的日期格式兼容性(不同的日期格式迁移很痛苦),以及在不同终端展示的日期格式有较好的弹性(后台返回long即可,不考虑转换问题)。同时,也带来了不小的缺点。较典型的就是日期区间查询问题。本工具类的大部分方法都是基于此背景而建。因此看起来怪怪的。

public class DateHelper {/*** 设置日期查询区间** @param wrapper   条件* @param dateFun   条件字段函数* @param startTime 开始日期* @param endTime   结束日期* @param <T>       条件*/public static <T> void setStartEndTime(LambdaQueryWrapper<T> wrapper, SFunction<T, Long> dateFun, Long startTime, Long endTime) {if (null == startTime && null == endTime) {return;}if (null != startTime && null == endTime) {startTime =  getStartTimeOfCurrentDay(new Date(startTime)).getTime();endTime = System.currentTimeMillis();} else if (null == startTime) {startTime = 0L;endTime =  getEndTimeOfCurrentDay(new Date(endTime)).getTime();} else {startTime =  getStartTimeOfCurrentDay(new Date(startTime)).getTime();endTime =  getEndTimeOfCurrentDay(new Date(endTime)).getTime();}wrapper.between(dateFun, startTime, endTime);}/*** 设置本年份查询条区** @param wrapper 条件* @param dateFun 年份日期字段函数* @param <T>     条件*/public static <T> void setYearDateWrapper(LambdaQueryWrapper<T> wrapper, SFunction<T, Long> dateFun) {setYearDateWrapper(wrapper, getNowYear(), dateFun);}/*** 设置年份查询条区** @param wrapper 条件* @param year    年* @param dateFun 年份日期字段函数* @param <T>     条件*/public static <T> void setYearDateWrapper(LambdaQueryWrapper<T> wrapper, Integer year, SFunction<T, Long> dateFun) {if (null == year) {return;}Date startDate =  getFirstDayOfYearMonth(year, 1);Date endDate =  getLastDayOfYearMonth(year, 12);wrapper.between(dateFun, startDate.getTime(), endDate.getTime());}/*** 设置日期状态查询条件** @param lambdaQuery 条件* @param status      状态* @param startFun    开始时间* @param endFun      结束时间* @param <T>         条件*/public static <T> void toSetDateStatus(LambdaQueryWrapper<T> lambdaQuery, Integer status, SFunction<T, Long> startFun, SFunction<T, Long> endFun) {if (null == status) {return;}long now = System.currentTimeMillis();if (status == GlobalConstant.NO_START) {// 未开始-->开始时间大于当前时间lambdaQuery.gt(startFun, now);} else if (status == GlobalConstant.IS_GOING) {// 进行中-->开始时间小于等于当前时间,结束时间大于当前时间lambdaQuery.le(startFun, now);lambdaQuery.gt(endFun, now);} else if (status == GlobalConstant.IS_END) {// 已结束-->结束时间小于等于当前时间lambdaQuery.le(endFun, now);} else {// 已结束-->结束时间小于等于当前时间lambdaQuery.ge(endFun, now);}}/*** 判断目标时间是否在当前时间之后** @param time 目标时间* @return 是否之后*/public static boolean isAfter(Long time) {return isAfter(time, System.currentTimeMillis());}/*** 判断目标时间是否在当前时间之前** @param time 目标时间* @return 是否之前*/public static boolean isBefore(Long time) {return isBefore(time, System.currentTimeMillis());}/*** 判断目标时间是否在某时间之后** @param time       某时间* @param targetTime 目标时间* @return 是否之后*/public static boolean isAfter(Long time, Long targetTime) {if (null == time || null == targetTime) {return false;}long now = System.currentTimeMillis();return time > targetTime;}/*** 判断目标时间是否在某时间之前** @param time       某时间* @param targetTime 目标时间* @return 是否之前*/public static boolean isBefore(Long time, Long targetTime) {if (null == time || null == targetTime) {return false;}long now = System.currentTimeMillis();return time <= targetTime;}/*** 匹配开始-进行中-结束状态中文名称** @param startTime 开始时间* @param endTime   结束时间* @return 状态中文名称*/public static String getStartEndStatusName(Date startTime, Date endTime) {return getStartEndStatusName("", startTime, endTime);}/*** 匹配开始-进行中-结束状态中文名称** @param startTime 开始时间* @param endTime   结束时间* @return 状态中文名称*/public static String getStartEndStatusName(Long startTime, Long endTime) {return getStartEndStatusName("", startTime, endTime);}/*** 匹配开始-进行中-结束状态中文名称** @param namePrefix 状态前缀,如会议未开始,会议已结束* @param startTime  开始时间* @param endTime    结束时间* @return 状态中文名称*/public static String getStartEndStatusName(String namePrefix, Date startTime, Date endTime) {if (ZYStrUtils.isAnyNull(startTime, endTime)) {return namePrefix + "已结束";}return getStartEndStatusName(startTime.getTime(), endTime.getTime());}/*** 匹配开始-进行中-结束状态中文名称** @param namePrefix 状态前缀,如会议未开始,会议已结束* @param startTime  开始时间* @param endTime    结束时间* @return 状态中文名称*/public static String getStartEndStatusName(String namePrefix, Long startTime, Long endTime) {if (ZYStrUtils.isAnyNull(startTime, endTime)) {return namePrefix + "已结束";}long now = System.currentTimeMillis();if (now <= startTime) { // 当前时间小于开始时间return namePrefix + "未开始";} else if (now < endTime) { // 当前时间大于开始时间,小于结束时间return namePrefix + "进行中";} else if (now >= endTime) { // 当前时间大于等于结束时间return namePrefix + "已结束";} else {return namePrefix + "已结束";}}/*** 根据年龄设置时间查询区间** @param startAge     开始年龄* @param endAge       结束年龄* @param setStartTime 开始条件函数* @param setEndTime   结束条件函数*/public static void setStartEndAge(Integer startAge, Integer endAge, Consumer<Long> setStartTime,Consumer<Long> setEndTime) {if (ZYStrUtils.isAllNotNull(startAge, endAge)) {setStartTime.accept(computerStartTime(endAge + 1));setEndTime.accept(computerEndTime(startAge));}}/*** 获取某天的开始date** @param year  年* @param month 月* @param day   天* @return 开始日期*/public static Date getFirstDayOfYearMonth(Integer year, Integer month, Integer day) {return getStartEndDate(year, month, day, true);}/*** 获取某天的开始date** @param year  年* @param month 月* @return 开始日期*/public static Date getFirstDayOfYearMonth(Integer year, Integer month) {return getStartEndDate(year, month, null, true);}/*** 获取某天的结束date** @param year  年* @param month 月* @return 结束日期*/public static Date getLastDayOfYearMonth(Integer year, Integer month) {return getStartEndDate(year, month, null, false);}/*** 获取某天的结束date** @param year  年* @param month 月* @param day   日* @return 结束日期*/public static Date getLastDayOfYearMonth(Integer year, Integer month, Integer day) {return getStartEndDate(year, month, day, false);}/*** 设置开始结束查询条件,前端传一些半区间的空值处理** @param startTime    开始时间* @param endTime      结束时间* @param setStartTime 开始时间设置函数* @param setEndTime   结束时间设置函数*/public static void setQueryTime(Long startTime, Long endTime, Consumer<Long> setStartTime,Consumer<Long> setEndTime) {if (null == startTime && null == endTime) {return;} else if (null != startTime && null == endTime) {startTime = getStartTimeOfCurrentDay(new Date(startTime)).getTime();endTime = System.currentTimeMillis();} else if (null == startTime) {startTime = 0L;endTime = getEndTimeOfCurrentDay(new Date(endTime)).getTime();} else {startTime = getStartTimeOfCurrentDay(new Date(startTime)).getTime();endTime = getEndTimeOfCurrentDay(new Date(endTime)).getTime();}setStartTime.accept(startTime);setEndTime.accept(endTime);}/*** 获取本月第一天毫秒数** @return 最后一天*/public static long getMonthStartDay() {LocalDate date = LocalDate.now();LocalDate with1 = date.with(TemporalAdjusters.firstDayOfMonth());ZonedDateTime atStartOfDay = with1.atStartOfDay(ZoneId.systemDefault());Instant instant = atStartOfDay.toInstant();Date from = Date.from(instant);return from.getTime();}/*** 获取本月最后一天毫秒数** @return 最后一天*/public static long getMonthEndDay() {LocalDate date = LocalDate.now();LocalDate with2 = date.with(TemporalAdjusters.lastDayOfMonth());ZonedDateTime atStartOfDay = with2.atStartOfDay(ZoneId.systemDefault());Instant instant = atStartOfDay.toInstant();Date from = Date.from(instant);long time = from.getTime();long oneDay = (24 * 60 * 60 * 1000) - 1;time += oneDay;return time;}/*** 日期格式化** @param date    日期* @param pattern 表达式* @return 年龄*/public static String formart(Long date, String pattern) {if (null == date) {return "";}return formart(new Date(date), pattern);}/*** 日期格式化** @param date    日期* @param pattern 表达式* @return 年龄*/public static String formart(Date date, String pattern) {if (null == date) {return "";}SimpleDateFormat sdf = new SimpleDateFormat(pattern);try {return sdf.format(date);} catch (Exception e) {return null;}}/*** 根据日期计算年龄** @param birthday 日期* @return 年龄*/public static Integer getAgeByBirth(String birthday) {Date birth = toDate(birthday, "yyyy-MM-dd");return getAgeByBirth(birth);}/*** 根据日期计算年龄** @param birthday 日期* @return 年龄*/public static Integer getAgeByBirth(Long birthday) {if (null != birthday && 0 != birthday) {try {return getAgeByBirth(new Date(birthday));} catch (Exception e) {return null;}}return null;}/*** 根据日期计算年龄** @param birth 日期* @return 年龄*/public static Integer getAgeByBirth(Date birth) {if (null == birth) {return null;}Calendar instance = Calendar.getInstance();int yearNow = instance.get(Calendar.YEAR);int monthNow = instance.get(Calendar.MONTH) + 1;Calendar instanceBirth = Calendar.getInstance();instanceBirth.setTime(birth);int yearBirth = instanceBirth.get(Calendar.YEAR);int monthBirth = instanceBirth.get(Calendar.MONTH) + 1;int age = yearNow - yearBirth;// 判断是否足月if (monthNow > monthBirth) {age = age + 1;}return Math.min(age, 150);}/*** 修改日期元素** @param date   日期* @param hour   时* @param min    分* @param second 秒* @return 日期*/public static Date setTimes(Date date, int hour, int min, int second) {Calendar cal = Calendar.getInstance();cal.setTime(date);cal.add(Calendar.HOUR, hour);cal.add(Calendar.MINUTE, min);cal.add(Calendar.SECOND, second);return cal.getTime();}/*** 修改日期的天** @param date 日期* @param days 天数* @return 日期*/public static Date getDateFromNow(Date date, int days) {Calendar cal = Calendar.getInstance();cal.setTime(date);cal.add(Calendar.DAY_OF_YEAR, days);return cal.getTime();}/*** 年份天转日期** @param days 天数* @return 日期*/public static Date getDateFromNow(int days) {Calendar cal = Calendar.getInstance();cal.add(Calendar.DAY_OF_YEAR, days);return cal.getTime();}/*** 字符转日期,处理下异常** @param date 日期* @param sdf  转换器* @return 日期*/public static Date toDate(String date, SimpleDateFormat sdf) {Date parse;try {parse = sdf.parse(date);} catch (ParseException e) {return null;}return parse;}/*** 通用字符转日期,处理下异常** @param date 日期* @return 日期*/public static Long toDataLong(String date) {Date d = toDate(date);return null != d ? d.getTime() : null;}/*** 通用字符转日期,处理下异常** @param date 日期* @return 日期*/public static Date toDate(String date) {// 13707490327if (ZYStrUtils.isNull(date)) {return null;}Date parse = toDate(date, "yyyy-MM-dd HH:mm:ss");if (null == parse) {parse = toDate(date, "yyyy-MM-dd");}if (null == parse) {parse = toDate(date, "yyyy-MM-dd HH:mm:ss.SSS");}if (null == parse) {parse = toDate(date, "yyyyMMdd");}if (null == parse) {parse = toDate(date, "yyyyMMddHHmmss");}if (null == parse) {parse = toDate(date, "MM/dd/yyyy");}if (null == parse) {parse = toDate(date, "yyyy.MM");}if (null == parse && date.length() == 13) {try {long parseLong = Long.parseLong(date);parse = new Date(parseLong);} catch (NumberFormatException e) {return null;}}return parse;}/*** 字符转日期,处理下异常** @param date   日期* @param patten 表达式* @return 日期*/public static Date toDate(String date, String patten) {// 13707490327SimpleDateFormat sdf = new SimpleDateFormat(patten);Date parse;try {parse = sdf.parse(date);} catch (ParseException e) {return null;}return parse;}/*** 获取本天天的最开始的一刻,某天最小** @return 本天最小日期*/public static long getStartLongTimeOfCurrentDay() {return getStartTimeOfCurrentDay().getTime();}/*** 获取本天天的最开始的一刻,某天最小** @return 本天最小日期*/public static Date getStartTimeOfCurrentDay() {return getStartTimeOfCurrentDay(new Date());}/*** 获取某一天的最开始的一刻,某天最小** @param date 日期* @return 本天最小日期*/public static long getStartLongTimeOfCurrentDay(Date date) {return getStartTimeOfCurrentDay(date).getTime();}/*** 获取某一天的最开始的一刻,某天最小** @param date 日期* @return 本天最小日期*/public static Date getStartTimeOfCurrentDay(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.HOUR_OF_DAY, 0);calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);calendar.set(Calendar.MILLISECOND, 0);return calendar.getTime();}/*** 获取今天的最大日期时决戮** @return 今天 最大日期*/public static long getEndLongTimeOfCurrentDay() {return getEndTimeOfCurrentDay().getTime();}/*** 获取今天的最大日期** @return 今天 最大日期*/public static Date getEndTimeOfCurrentDay() {return getEndTimeOfCurrentDay(new Date());}/*** 获取最大日期** @param date 日期* @return 最大的long日期*/public static Long getEndLongTimeOfCurrentDay(Date date) {if (null == date) {return null;}return getEndTimeOfCurrentDay(date).getTime();}/*** 获取某一天的最后一刻,某天最大的时间戮** @param date 日期* @return 本天最大日期*/public static Date getEndTimeOfCurrentDay(Date date) {if (null == date) {return null;}Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.HOUR_OF_DAY, 23);calendar.set(Calendar.MINUTE, 59);calendar.set(Calendar.SECOND, 59);calendar.set(Calendar.MILLISECOND, 999);return calendar.getTime();}/*** 获取当前季节** @return 季节*/public static int getQuarter() {return getQuarter(DateTime.now());}/*** 获取日期季节** @param date 日期* @return 季节*/public static Integer getQuarter(Long date) {return null == date ? null : getQuarter(new DateTime(date));}/*** 获取日期季节** @param dateTime 日期* @return 季节*/public static int getQuarter(DateTime dateTime) {int monthOfYear = dateTime.getMonthOfYear();if (monthOfYear <= 3) {return 1;}if (monthOfYear <= 6) {return 2;}if (monthOfYear <= 9) {return 3;}return 4;}/*** 获取当前月** @return 当前月份*/public static int getMonthValue() {LocalDate date = LocalDate.now();return date.getMonthValue();}/*** 获取当前年** @return 当前年份*/public static int getNowYear() {LocalDate date = LocalDate.now();return date.getYear();}/*** 日期转Long,处理下非空** @param dateLong 时间戳* @return 日期*/public static Long toLongDate(String dateLong) {if (ZYStrUtils.isNull(dateLong)) {return null;}Date date = toDate(dateLong);return null != date ? date.getTime() : null;}private static Date getStartEndDate(Integer year, Integer month, Integer day, boolean isGetForStart) {if (null == year || null == month) {return null;}Calendar cal = Calendar.getInstance();// 设置年份cal.set(Calendar.YEAR, year);// 设置月份cal.set(Calendar.MONTH, month - 1);if (null == day) {int dayOfMonth = Calendar.DAY_OF_MONTH;day = isGetForStart ?cal.getActualMinimum(dayOfMonth) : cal.getActualMaximum(dayOfMonth);}cal.set(Calendar.DAY_OF_MONTH, day);cal.set(Calendar.HOUR_OF_DAY, isGetForStart ? 0 : 23);cal.set(Calendar.MINUTE, isGetForStart ? 0 : 59);cal.set(Calendar.SECOND, isGetForStart ? 0 : 59);cal.set(Calendar.MILLISECOND, isGetForStart ? 0 : 999);return cal.getTime();}/*** 根据年龄计算出生年的开始时间** @param endAge 年龄* @return 出生开始时间*/private static Long computerStartTime(Integer endAge) {if (ZYStrUtils.isNull(endAge)) {return Long.MIN_VALUE;}DateTime now = new DateTime();int year = now.getYear();int month = now.getMonthOfYear();int day = now.getDayOfMonth();int endYear = year - endAge;Date date = getFirstDayOfYearMonth(endYear, month, day);return date.getTime();}/*** 根据年龄计算出生年的结束时间** @param startAge 年龄* @return 出生结束时间*/private static Long computerEndTime(Integer startAge) {// 40if (ZYStrUtils.isNull(startAge)) {return System.currentTimeMillis();}DateTime now = new DateTime();int year = now.getYear();int month = now.getMonthOfYear();int day = now.getDayOfMonth();int endYear = year - startAge;Date date = getLastDayOfYearMonth(endYear, month, day);return date.getTime();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题——LeetCode1103.分糖果 ||

方法一 个人方法&#xff1a; 有多少人就创建多大的数组并把数组的所有元素初始化为0&#xff0c;只要还有糖果&#xff0c;就循环给数组从头到尾添加糖果&#xff0c;每次分的糖果数递增1&#xff0c;最后可能刚好分完也可能不够&#xff0c;不够就还剩多少给多少。 var dis…

麒麟操作系统缓存rpm包,制作离线yum源

缓存rpm包&#xff0c;以make为例 mkdir -p /data/yum yumdownloader --resolve --destdir/data/yum make制作离线yum包 yum install createrepo -y cd /data/yum createrepo .写yum配置文件/etc/yum.repos.d/local.repo [local-repo] namelocal-repo baseurlfile:///data/…

x-cmd pkg | pypinyi - 汉字拼音转换工具

目录 简介首次用户功能特点相关工具进一步探索 简介 pypinyin 是一个汉字拼音转换工具&#xff0c;支持多种词库&#xff0c;多种输出格式&#xff0c;支持自定义词组拼音库或单字拼音库。 首次用户 使用 x env use pypinyin 即可自动下载并使用 在终端运行 eval "$(cur…

freemarker导出word文件实现动态列合并

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

7-6 jmu-Java-02基本语法-04-动态数组 --笔记篇

题目 根据输入的n&#xff0c;打印n行乘法口诀表。 需要使用二维字符串数组存储乘法口诀表的每一项&#xff0c;比如存放1*11. 为了保证程序中使用了二维数组&#xff0c;需在打印完乘法口诀表后使用Arrays.deepToString打印二维数组中的内容。 提醒&#xff1a;格式化输出可…

如何在Linux部署OpenGauss数据管理系统并实现固定公网地址访问

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合…

Visual Studio中项目添加链接文件

这个需求在VS里面使用还真不多见&#xff0c;只是最近在做项目的版本编号的时候遇到一个头大的问题&#xff0c;我一个解决方案下面有几十个类库&#xff0c;再发布的时候这几十个类库的版本号必须要统一&#xff0c;之前我们都是在单个的AssemblyInfo.cs里面去改相关的信息&am…

flask框架基本使用

一、使用pycharm创建项目 1.创建项目 2.调整默认终端 3.打开虚拟终端 打开终端可以看出使用的是p1的虚拟机终端了 4.pyCharm小技巧 在flask种输入一个完整并且存在的函数名称或者类明&#xff0c; 然后 Alt 回车&#xff0c;pycharm可以自动导包&#xff0c;不用在手动在代…

Go并发快速入门:Goroutine

Go并发&#xff1a;Goroutine 1.并发基础概念&#xff1a;进程、线程、协程 (1) 进程 可以比作食材加工的一系列动作 进程就是程序在操作系统中的一次执行过程&#xff0c;是由系统进行资源分配和调度的基本单位&#xff0c;进程是一个动态概念&#xff0c;是程序在执行过程…

jmeter--3.使用提取器进行接口关联

目录 1. 正则表达式提取器 1.1 提取单个数据 1.2 名词解释 1.3 提取多个数据 2. 边界值提取器 2.2 名词解释 3. JSON提取器 3.1 Json语法 3.2 名词解释 3.3 如果有多组数据&#xff0c;同正则方式引用数据 1. 正则表达式提取器 示例数据&#xff1a;{"access_to…

C语言指针相关知识(初阶)

目录 指针是什么 指针变量的大小 指针和指针类型 指针类型的意义 野指针 指针运算 指针-整数 指针-指针 指针的关系运算 指针和数组 二级指针 二级指针定义 指针数组 指针数组的定义 指针是什么 如下图所示&#xff08;右侧编号为内存地址&#xff09;&#xff1…

C++多线程学习[二]:线程的传参以及传参的一些坑

一、线程的传参 #include<iostream> #include<thread> #include<string> using namespace std; void threadtest(int a,double b,string str) {this_thread::sleep_for(100ms);cout << a << " " << b << " " &…

vue3+ts项目开启 devtools 时,页面卡顿

项目场景&#xff1a; 项目&#xff1a;Vue3tsantdesginvue/elementPlus 问题描述 vue3ts项目开启 devtools 时&#xff0c;页面卡顿 原因分析&#xff1a; TS类型在页面加载渲染时导出过多&#xff0c;导致 devtools 在进行性能分析的时候&#xff0c;耗费了太多资源。 所以…

九、static关键字

static关键字 九、static关键字1. 概述2. 静态变量3. 静态块4. 静态方法5. 静态内部类6. 静态导入7. 静态特性8. 小结9. 注意事项 九、static关键字 1. 概述 static是一个关键字&#xff0c;用于定义类、方法、变量和代码块的静态特性。它可以在不同的上下文中使用&#xff0…

Tampermonkey油猴插件-各大网盘批量分享,解放双手-下

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列

NetApp AFF C 系列全闪存存储的主要优势和软件特性

NetApp AFF C 系列全闪存存储 采用全新的闪存技术&#xff0c;同时辅以智能科技加持&#xff0c;将为您带来一个更为经济实惠的全闪存解决方案&#xff0c;它重新定义了安全性、可扩展性和可持续性。 为什么选择 AFF C 系列的新一代全闪存解决方案&#xff1f; 实现现代化&am…

Overleaf Docker编译复现计划

Overleaf Docker编译复现计划 Overleaf Pro可以支持不同年份的Latex镜像自由选择编译&#xff0c;这实在是一个让人看了心痒痒的功能。但是很抱歉&#xff0c;这属于Pro付费功能。但是我研究了一下&#xff0c;发现其实和Docker编译相关的代码&#xff0c;社区版的很多代码都没…

docker部署mongo过程

1、拉取MongoDB镜像&#xff0c;这里拉取最新版本。 docker pull mongo2、运行容器 docker run -d --name mongo -p 27017:27017 \ -e MONGO_INITDB_ROOT_USERNAMEadmin \ -e MONGO_INITDB_ROOT_PASSWORD123456 \ mongo:latest --auth#由于 mongodb 默认情况下&#xff0c;…

如何控制docker服务的日志输出?

引言 通过docker部署的线上服务&#xff0c;由于宿主机存储空间有限&#xff0c;加上长时间累积的客观条件下&#xff0c;会出现docker服务的控制台日志过大。再三思量后决定不输出控制台日志&#xff0c;从而从根源解决此问题。 在Docker Compose中&#xff0c;您可以通过添加…

【Linux】编写第一个小程序:进度条

文章目录 1. 预备知识1.1 简单认识几个函数1.1.1 sleep()1.1.2 fflush()1.1.3 usleep()1.1.4 memset() 1.2 缓冲区1.3 回车与换行 2. 编写入门版的进度条2.1 基本逻辑2.2 美化效果2.3 代码实现2.4 执行效果 3. 编写升级版的进度条3.1 代码实现3.2 执行效果 1. 预备知识 1.1 简…