- 浏览: 96741 次
- 性别:
- 来自: 湖南
文章分类
最新评论
-
化蝶自在飞:
还是走腾讯应用宝吧.
微信扫二维码下载客户端被挡 -
hyper1987stone:
java敏感词过滤 -
菜鸟级JAVA:
先引用2个js(一个jquery、一个日期插件),然后在需要使 ...
java jsp 日期控件 -
woshishen__74:
你的有点问题 是不是少了一个jar包?????
java jsp 日期控件
package util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;
/**
* 对时间处理的相关工具类
*
* @author
* @date
* @version 1.0
*/
public class TimeUtil {
/**
* 判断时间戳是否在有效范围内
*
* @param inputTimes 输入的时间戳
* @param regionValue 时间戳范围,毫秒级
* @return 是否有效,有效=true
*/
public static boolean checkTimeStamp(long inputTimes, long regionValue) {
return Math.abs(inputTimes - System.currentTimeMillis()) < regionValue;
}
/**
* 时间对象转为字符串
*
* @param date Date对象
* @param type
* 格式0=yyyy-MM-dd,1=yyyy/MM/dd,2=yyyyMMdd,3=MM/dd/yy,4=yyyy-MM-dd HH:mm:ss
* @return 时间字符串
*/
public static String DateToString(java.util.Date date, int type) {
String format = "yyyy-MM-dd";
if (type == 0) {
format = "yyyy-MM-dd";
} else if (type == 1) {
format = "yyyy/MM/dd";
} else if (type == 2) {
format = "yyyyMMdd";
} else if (type == 3) {
format = "MM/dd/yy";
} else if (type == 4) {
format = "yyyy-MM-dd HH:mm:ss";
} else if (type == 5) {
format = "yyyy/MM/dd HH:mm:ss";
} else if (type == 6) {
format = "yyyyMMddHHmmss";
} else if(type == 7){
format = "yyyyMMddHHmmssSSS";
}
SimpleDateFormat formatter = new SimpleDateFormat(format);
if (date != null) {
return formatter.format(date);
} else {
return "";
}
}
/**
* 字符串对象转为Date对象,格式不符返回null
*
* @param strDate 输入字符串
* @param type
* 格式0=yyyy-MM-dd,1=yyyy/MM/dd,2=yyyyMMdd,3=MM/dd/yy,4=yyyy-MM-dd HH:mm:ss
* @return Date对象
*/
public static java.util.Date StringToDate(String strDate, int type) {
Date result = null;
String format = "yyyy-MM-dd";
if (type == 0) {
format = "yyyy-MM-dd";
} else if (type == 1) {
format = "yyyy/MM/dd";
} else if (type == 2) {
format = "yyyyMMdd";
} else if (type == 3) {
format = "MM/dd/yy";
} else if (type == 4) {
format = "yyyy-MM-dd HH:mm:ss";
} else if (type == 5) {
format = "yyyy/MM/dd HH:mm:ss";
} else if (type == 6) {
format = "yyyyMMddHHmmss";
} else if (type == 7) {
format = "yyyyMMddHHmmssSSSZ";
}
SimpleDateFormat formatter = new SimpleDateFormat(format);
if (strDate != null && !strDate.equals("")) {
try {
result = formatter.parse(strDate);
} catch (ParseException ex) {
result = null;
ex.printStackTrace();
}
}
return result;
}
/**
* 判断是否闰年
*
* @param year 年份
* @return true=是闰年
*/
public static boolean isLeapYear(int year) {
return (((year % 4) == 0 && year % 100 != 0) || year % 400 == 0);
}
/**
* 返回四位年份
*
* @param date 输入时间
* @return 年份
*/
public static int getYear(Date date) {
if (date == null) {
return -1;
}
return date.getYear() + 1900;
}
/**
* 返回月份
*
* @param date 输入时间
* @return 月份
*/
public static int getMonth(Date date) {
if (date == null) {
return -1;
}
return date.getMonth() + 1;
}
/**
* 返回几号
*
* @param date 输入时间
* @return 几号
*/
public static int getMonthDay(Date date) {
if (date == null) {
return -1;
}
return date.getDate();
}
/**
* 返回周几,0=Sunday,1=Monday,2=Tuesday,3Wednesday,4=Thursday,5=Friday,6=Saturday
*
* @param date 输入时间
* @return 周几
*/
public static int getWeekDay(Date date) {
if (date == null) {
return -1;
}
return date.getDay();
}
/**
* 返回周几(中国),7=Sunday,1=Monday,2=Tuesday,3Wednesday,4=Thursday,5=Friday,6=Saturday
*
* @param date 输入时间
* @return 周几
*/
public static int getChinaWeekDay(Date date) {
if (date == null) {
return -1;
}
int d = date.getDay();
if (d == 0) {
d = 7;
}
return d;
}
/**
* 返回小时数(0-23)
*
* @param date 输入时间
* @return 小时数
*/
public static int getHours(Date date) {
if (date == null) {
return -1;
}
return date.getHours();
}
/**
* 返回分钟数
*
* @param date 输入时间
* @return 分钟数
*/
public static int getMinutes(Date date) {
if (date == null) {
return -1;
}
return date.getMinutes();
}
/**
* 是否是今天
*
* @param date 输入时间
* @return true=是
*/
public static boolean isToday(Date date) {
if (date == null) {
return false;
}
Date today = new Date();
return (date.getYear() == today.getYear() && date.getMonth() == today.getMonth() && date
.getDate() == today.getDate()) ? true : false;
}
/**
* 是否在某个小时的区间0-23内。
*
* @param date 输入时间
* @param hour 某小时
* @return true=true
*/
public static boolean isInHour(Date date, int hour) {
if (date == null || hour < 0) {
return false;
}
return (getHours(date) == hour) ? true : false;
}
/**
* GMT字符串转成时间字符串
*
* @param gmtStr
* @param type
* @return
*/
public static String dateGMTStrToString(String gmtStr, int type) {
String format = "yyyy-MM-dd";
if (type == 0) {
format = "yyyy-MM-dd";
} else if (type == 1) {
format = "yyyy/MM/dd";
} else if (type == 2) {
format = "yyyyMMdd";
} else if (type == 3) {
format = "MM/dd/yy";
} else if (type == 4) {
format = "yyyy-MM-dd HH:mm:ss";
} else if (type == 5) {
format = "yyyy/MM/dd HH:mm:ss";
} else if (type == 6) {
format = "yyyyMMddHHmmss";
} else if(type == 7){
format = "yyyyMMddHHmmssSSS";
}
SimpleDateFormat formatter = new SimpleDateFormat(format);
if (gmtStr != null) {
return formatter.format(Date.parse(gmtStr));
} else {
return "";
}
}
/**
* 获取当前时间的下个月1号的时间
* 如何time参数为空,则时分秒为当前的时分秒,否则为指定的时分秒
* time的格式只能为HH:mm:ss
*/
public static Date getfirstDayOfNextMonthByNow(String time,int type) throws Exception{
Calendar cal = Calendar.getInstance();
//当前日期到下个月1号的还差多少天
int day = (TimeUtil.getCurrentMonthLastDay()-cal.get(Calendar.DAY_OF_MONTH))+1;
if(type==1){
cal.add(Calendar.DAY_OF_MONTH, day);
}else if(type==2){
cal.add(Calendar.DAY_OF_MONTH, day);
cal.add(Calendar.MONTH, 2);
}else if(type==3){
cal.add(Calendar.DAY_OF_MONTH, day);
cal.add(Calendar.MONTH, 5);
}
return format(cal.getTime(), time);
}
/**
* 获取当前时间的特定天数的后的时间
* 如何time参数为空,则时分秒为当前的时分秒,否则为指定的时分秒
* time的格式只能为HH:mm:ss
*/
public static Date getDayOfNextMonthByNow(int type) throws Exception{
Calendar cal = Calendar.getInstance();
if(type==1){
cal.add(Calendar.DAY_OF_MONTH, 30);
}else if(type==2){
cal.add(Calendar.DAY_OF_MONTH, 91);
}else if(type==3){
cal.add(Calendar.DAY_OF_MONTH, 180);
}else if(type==4){
cal.add(Calendar.DAY_OF_MONTH, 365);
}
return cal.getTime();
}
/**
* 获取当前时间的下一年的当前月1号时间
* 如何time参数为空,则时分秒为当前的时分秒,否则为指定的时分秒
* time的格式只能为HH:mm:ss
*/
public static Date getfirstDayOfNextYearByNow(String time) throws Exception{
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -cal.get(Calendar.DAY_OF_MONTH)+1);
cal.add(Calendar.YEAR, 1);
return format(cal.getTime(), time);
}
private static Date format(Date date,String time) throws Exception{
String dateString = DateToString(date, 0);
if(time==null||"".equals(time)){
time = DateToString(date, 10);
}
String regex = "[0-2][0-9]:[0-5][0-9]:[0-5][0-9]";
if(!Pattern.matches(regex, time)){
throw new Exception("time的格式只能为HH:mm:ss");
}
dateString = dateString+" "+time;
return StringToDate(dateString, 4);
}
/**
* 取得当月天数
* */
public static int getCurrentMonthLastDay() {
Calendar a = Calendar.getInstance();
a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
int maxDate = a.get(Calendar.DATE);
return maxDate;
}
public static void main(String[] args) {
try {
System.out.println(TimeUtil.DateToString(TimeUtil.getDayOfNextMonthByNow(1), 4));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;
/**
* 对时间处理的相关工具类
*
* @author
* @date
* @version 1.0
*/
public class TimeUtil {
/**
* 判断时间戳是否在有效范围内
*
* @param inputTimes 输入的时间戳
* @param regionValue 时间戳范围,毫秒级
* @return 是否有效,有效=true
*/
public static boolean checkTimeStamp(long inputTimes, long regionValue) {
return Math.abs(inputTimes - System.currentTimeMillis()) < regionValue;
}
/**
* 时间对象转为字符串
*
* @param date Date对象
* @param type
* 格式0=yyyy-MM-dd,1=yyyy/MM/dd,2=yyyyMMdd,3=MM/dd/yy,4=yyyy-MM-dd HH:mm:ss
* @return 时间字符串
*/
public static String DateToString(java.util.Date date, int type) {
String format = "yyyy-MM-dd";
if (type == 0) {
format = "yyyy-MM-dd";
} else if (type == 1) {
format = "yyyy/MM/dd";
} else if (type == 2) {
format = "yyyyMMdd";
} else if (type == 3) {
format = "MM/dd/yy";
} else if (type == 4) {
format = "yyyy-MM-dd HH:mm:ss";
} else if (type == 5) {
format = "yyyy/MM/dd HH:mm:ss";
} else if (type == 6) {
format = "yyyyMMddHHmmss";
} else if(type == 7){
format = "yyyyMMddHHmmssSSS";
}
SimpleDateFormat formatter = new SimpleDateFormat(format);
if (date != null) {
return formatter.format(date);
} else {
return "";
}
}
/**
* 字符串对象转为Date对象,格式不符返回null
*
* @param strDate 输入字符串
* @param type
* 格式0=yyyy-MM-dd,1=yyyy/MM/dd,2=yyyyMMdd,3=MM/dd/yy,4=yyyy-MM-dd HH:mm:ss
* @return Date对象
*/
public static java.util.Date StringToDate(String strDate, int type) {
Date result = null;
String format = "yyyy-MM-dd";
if (type == 0) {
format = "yyyy-MM-dd";
} else if (type == 1) {
format = "yyyy/MM/dd";
} else if (type == 2) {
format = "yyyyMMdd";
} else if (type == 3) {
format = "MM/dd/yy";
} else if (type == 4) {
format = "yyyy-MM-dd HH:mm:ss";
} else if (type == 5) {
format = "yyyy/MM/dd HH:mm:ss";
} else if (type == 6) {
format = "yyyyMMddHHmmss";
} else if (type == 7) {
format = "yyyyMMddHHmmssSSSZ";
}
SimpleDateFormat formatter = new SimpleDateFormat(format);
if (strDate != null && !strDate.equals("")) {
try {
result = formatter.parse(strDate);
} catch (ParseException ex) {
result = null;
ex.printStackTrace();
}
}
return result;
}
/**
* 判断是否闰年
*
* @param year 年份
* @return true=是闰年
*/
public static boolean isLeapYear(int year) {
return (((year % 4) == 0 && year % 100 != 0) || year % 400 == 0);
}
/**
* 返回四位年份
*
* @param date 输入时间
* @return 年份
*/
public static int getYear(Date date) {
if (date == null) {
return -1;
}
return date.getYear() + 1900;
}
/**
* 返回月份
*
* @param date 输入时间
* @return 月份
*/
public static int getMonth(Date date) {
if (date == null) {
return -1;
}
return date.getMonth() + 1;
}
/**
* 返回几号
*
* @param date 输入时间
* @return 几号
*/
public static int getMonthDay(Date date) {
if (date == null) {
return -1;
}
return date.getDate();
}
/**
* 返回周几,0=Sunday,1=Monday,2=Tuesday,3Wednesday,4=Thursday,5=Friday,6=Saturday
*
* @param date 输入时间
* @return 周几
*/
public static int getWeekDay(Date date) {
if (date == null) {
return -1;
}
return date.getDay();
}
/**
* 返回周几(中国),7=Sunday,1=Monday,2=Tuesday,3Wednesday,4=Thursday,5=Friday,6=Saturday
*
* @param date 输入时间
* @return 周几
*/
public static int getChinaWeekDay(Date date) {
if (date == null) {
return -1;
}
int d = date.getDay();
if (d == 0) {
d = 7;
}
return d;
}
/**
* 返回小时数(0-23)
*
* @param date 输入时间
* @return 小时数
*/
public static int getHours(Date date) {
if (date == null) {
return -1;
}
return date.getHours();
}
/**
* 返回分钟数
*
* @param date 输入时间
* @return 分钟数
*/
public static int getMinutes(Date date) {
if (date == null) {
return -1;
}
return date.getMinutes();
}
/**
* 是否是今天
*
* @param date 输入时间
* @return true=是
*/
public static boolean isToday(Date date) {
if (date == null) {
return false;
}
Date today = new Date();
return (date.getYear() == today.getYear() && date.getMonth() == today.getMonth() && date
.getDate() == today.getDate()) ? true : false;
}
/**
* 是否在某个小时的区间0-23内。
*
* @param date 输入时间
* @param hour 某小时
* @return true=true
*/
public static boolean isInHour(Date date, int hour) {
if (date == null || hour < 0) {
return false;
}
return (getHours(date) == hour) ? true : false;
}
/**
* GMT字符串转成时间字符串
*
* @param gmtStr
* @param type
* @return
*/
public static String dateGMTStrToString(String gmtStr, int type) {
String format = "yyyy-MM-dd";
if (type == 0) {
format = "yyyy-MM-dd";
} else if (type == 1) {
format = "yyyy/MM/dd";
} else if (type == 2) {
format = "yyyyMMdd";
} else if (type == 3) {
format = "MM/dd/yy";
} else if (type == 4) {
format = "yyyy-MM-dd HH:mm:ss";
} else if (type == 5) {
format = "yyyy/MM/dd HH:mm:ss";
} else if (type == 6) {
format = "yyyyMMddHHmmss";
} else if(type == 7){
format = "yyyyMMddHHmmssSSS";
}
SimpleDateFormat formatter = new SimpleDateFormat(format);
if (gmtStr != null) {
return formatter.format(Date.parse(gmtStr));
} else {
return "";
}
}
/**
* 获取当前时间的下个月1号的时间
* 如何time参数为空,则时分秒为当前的时分秒,否则为指定的时分秒
* time的格式只能为HH:mm:ss
*/
public static Date getfirstDayOfNextMonthByNow(String time,int type) throws Exception{
Calendar cal = Calendar.getInstance();
//当前日期到下个月1号的还差多少天
int day = (TimeUtil.getCurrentMonthLastDay()-cal.get(Calendar.DAY_OF_MONTH))+1;
if(type==1){
cal.add(Calendar.DAY_OF_MONTH, day);
}else if(type==2){
cal.add(Calendar.DAY_OF_MONTH, day);
cal.add(Calendar.MONTH, 2);
}else if(type==3){
cal.add(Calendar.DAY_OF_MONTH, day);
cal.add(Calendar.MONTH, 5);
}
return format(cal.getTime(), time);
}
/**
* 获取当前时间的特定天数的后的时间
* 如何time参数为空,则时分秒为当前的时分秒,否则为指定的时分秒
* time的格式只能为HH:mm:ss
*/
public static Date getDayOfNextMonthByNow(int type) throws Exception{
Calendar cal = Calendar.getInstance();
if(type==1){
cal.add(Calendar.DAY_OF_MONTH, 30);
}else if(type==2){
cal.add(Calendar.DAY_OF_MONTH, 91);
}else if(type==3){
cal.add(Calendar.DAY_OF_MONTH, 180);
}else if(type==4){
cal.add(Calendar.DAY_OF_MONTH, 365);
}
return cal.getTime();
}
/**
* 获取当前时间的下一年的当前月1号时间
* 如何time参数为空,则时分秒为当前的时分秒,否则为指定的时分秒
* time的格式只能为HH:mm:ss
*/
public static Date getfirstDayOfNextYearByNow(String time) throws Exception{
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -cal.get(Calendar.DAY_OF_MONTH)+1);
cal.add(Calendar.YEAR, 1);
return format(cal.getTime(), time);
}
private static Date format(Date date,String time) throws Exception{
String dateString = DateToString(date, 0);
if(time==null||"".equals(time)){
time = DateToString(date, 10);
}
String regex = "[0-2][0-9]:[0-5][0-9]:[0-5][0-9]";
if(!Pattern.matches(regex, time)){
throw new Exception("time的格式只能为HH:mm:ss");
}
dateString = dateString+" "+time;
return StringToDate(dateString, 4);
}
/**
* 取得当月天数
* */
public static int getCurrentMonthLastDay() {
Calendar a = Calendar.getInstance();
a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
int maxDate = a.get(Calendar.DATE);
return maxDate;
}
public static void main(String[] args) {
try {
System.out.println(TimeUtil.DateToString(TimeUtil.getDayOfNextMonthByNow(1), 4));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
发表评论
-
用java代码发送邮件(优化版)
2017-02-28 10:10 708调用代码如下: if(!StringUtil.isNull ... -
java读取配置文件信息
2017-01-06 16:18 10841、先引包 import java.io.Buffered ... -
生产随机字符串
2016-12-26 10:05 780根据自己的需求生成随机位数的字符串,如:复杂度为中以上的8位随 ... -
java数字转汉语读法
2015-08-28 10:22 847看到好的东西就想收藏一份,说不定自己哪天就用的上了。 ... -
java正则验证数字、邮箱格式、字符串
2015-08-28 10:00 2315用java代码正则验证数字、邮箱格式、字符串的一些工具类方法 ... -
一个简易的线程池示例
2015-08-07 17:39 511package thread.pool; impor ... -
Thread里面使用@resource失败,对象为null
2015-07-02 15:10 4590spring 在Thread中注入@Resource失败,总为 ... -
用java代码发送邮件 附件
2015-06-29 18:30 4243PS:3种示例的代码都在附件压缩包里,每个包一种示例,独立运行 ... -
页面添加验证码
2015-04-24 18:38 681先上图 我的这种方式由3部分代码组成:页面(html+j ... -
查看class文件是被jdk什么版本编译的
2015-04-24 18:24 1098package image; import java ... -
maven+springMVC+mybatis+junit详细搭建过程
2015-02-28 16:16 877springMVC+mybatis框架搭建 首先我们先要弄清搭 ... -
Base64编码解码
2015-02-27 16:53 599package util; import java. ... -
手机号码相关匹配,判断是否手机号码,属于哪个运营商1移动2联通3电信
2015-02-26 09:05 1805package com.hzlq.yyffserver.uti ... -
完成对json数据的解析
2015-02-26 09:05 571package util; import java.util ... -
数字格式+计算工具类
2015-02-26 09:05 705package util; import java.math ... -
RC4加解密
2015-02-27 15:03 1253/** * * 项目名称: * 类名称:RC4Util ... -
DES加密解密
2015-02-26 09:06 550package util; import it.sauron ... -
字符串和xml互转工具类
2015-02-26 09:05 1157package util; import java.io.B ... -
读取配置文件工具类
2015-02-25 14:35 759package util; import java.util ... -
java String工具类
2015-02-25 14:28 1111package util; import java.text ...
相关推荐
date工具类
最近由于项目需要写了一些关于操作Date的代码,建议把经常需要的工具类保存下来,以备不时之需
在Java编程中,Date类是处理日期和时间的基础类,但在实际开发中,由于Date类本身的API设计并不十分友好,通常我们会使用工具类来简化日期的处理工作。本主题聚焦于一个名为"Date日期操作工具类"的实用工具,它提供...
这是本人自己整理的java中的Date工具类,包含了常用的时间格式化方法和转换方法;在工作中使用起来还是蛮方便的;希望对大家有帮助!
java Date操作工具类,对日期的各种基本的操作
Java工具类集合是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,工具类通常被组织在各种包下,如`java.util`、`java.lang`、`java.io`等。下面将详细介绍...
"Java常用工具类大全,工作5年精心整理.zip"这个压缩包文件很可能包含了一位有经验的Java开发者在五年工作中积累的各种实用工具类,这些工具类能够极大地提高开发效率,简化代码编写。以下是对可能包含的知识点进行...
在这个名为"牛逼的java常用工具类"的压缩包中,我们可以期待找到一些由经验丰富的开发者精心设计和优化的工具类,这些工具类能极大地提高开发效率,减少代码量,使程序更加健壮。下面,我们将详细探讨一些可能包含在...
Java常用工具类是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,最著名的工具类库是`java.util`包,它包含了大量实用类,如集合、日期时间、数学计算、...
在Java编程中,工具类(Util Classes)是包含各种实用方法的类,它们不持有状态,主要用于提供方便的静态方法。这些工具类极大地提升了代码的可读性和复用性。以下将详细介绍标题和描述中提到的一些关键工具类及其...
Java工具类是Java编程中非常重要的组成部分,它们提供了一系列预定义的方法,可以帮助开发者高效地处理各种常见任务,而无需从头实现。在Java中,最知名的工具类库是`java.util`包,它包含了大量方便实用的类。下面...
**java.util**: 这是最核心的工具包之一,包含了集合框架(如ArrayList、LinkedList、HashSet、HashMap等)、日期时间API(如Date、Calendar、LocalDate等)、事件模型、线程管理、随机数生成器以及多种实用工具类...
在Java编程语言中,工具类集合是一系列实用的类,它们提供了各种通用功能,帮助开发者更高效地编写代码。这些工具类通常包含在Java的`java.util`以及其他相关的包中,如`java.text`,`javax.imageio`,`javax.xml`等...
本篇将围绕Java中的日期工具类和时间工具类展开讨论,同时会涉及到日期时间的格式化。 首先,Java 8之前,我们主要依赖`java.util.Date`和`java.text.SimpleDateFormat`这两个类来处理日期和时间。`Date`类用于表示...
总的来说,`java.util.Date` 类在获取和表示当前系统时间上是一个基础且实用的工具,虽然在新的Java版本中有了更好的替代品,但理解其工作原理对于理解Java的日期和时间处理至关重要。在实际编程中,根据项目需求和...
Java工具类是Java编程中非常重要的组成部分,它们提供了一系列便捷的方法,可以极大地提高开发效率,减少重复代码。这里我们主要探讨的是一个集合了多种常见功能的Java工具类库。 首先,我们要理解Java工具类(Java...
在Java编程中,工具类(Utility Class)是包含静态方法的类,这些方法通常执行某种通用操作或提供一些辅助功能。这些工具类可以极大地提高代码的可读性和可重用性,减少代码冗余,使得开发者能更专注于业务逻辑。在...