关于Java中的时间格式化,一般使用SimpleDateFormat类实现。下面我将详细讲解如何使用SimpleDateFormat类对时间进行格式化,并且还会提供两个示例。
一、SimpleDateFormat类的基本用法
SimpleDateFormat类可以把日期时间格式化成需要的字符串形式。具体用法为先创建一个SimpleDateFormat对象,然后调用其format()方法即可。
格式化所用格式的字母含义:
- y:年
- M:月
- d:日
- H:时(24小时制)
- h:时(12小时制)
- m:分
- s:秒
- S:毫秒
如下代码就是使用SimpleDateFormat类对时间进行格式化的基本示例:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtil {
public static String formatDate(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
public static void main(String[] args) {
String format1 = "yyyy-MM-dd HH:mm:ss";
String format2 = "yyyy/MM/dd HH:mm:ss.SSS";
Date date = new Date();
System.out.println(formatDate(date, format1));
System.out.println(formatDate(date, format2));
}
}
在上面的代码中,我们首先定义了一个formatDate()方法,用于接收一个日期和一个格式参数,然后返回对应格式的日期字符串。在main()方法中,我们定义了两个格式,一个是“年-月-日 时:分:秒”,另一个是“年/月/日 时:分:秒.毫秒”,然后获取当前时间,分别使用这两个格式来格式化日期,并打印输出结果:
2022-02-23 15:40:28
2022/02/23 15:40:28.272
二、SimpleDateFormat类的常用格式化方法
在SimpleDateFormat类中,除了format()方法之外,还有很多其他常用的格式化方法。
- 将字符串转化为日期
使用SimpleDateFormat类的parse()方法可以将字符串解析为Date对象。例如:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtil {
public static Date parseDate(String dateStr, String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.parse(dateStr);
}
public static void main(String[] args) throws ParseException {
String format = "yyyy-MM-dd HH:mm:ss";
String dateStr = "2022-02-23 15:40:28";
Date date = parseDate(dateStr, format);
System.out.println(date);
}
}
在上面的代码中,我们定义了一个parseDate()方法,用于将字符串解析为日期对象。在main()方法中,我们定义了一个格式为“年-月-日 时:分:秒”的日期字符串,然后调用parseDate()方法将其解析为日期对象,并将结果打印输出:
Wed Feb 23 15:40:28 CST 2022
- 设置时区
使用SimpleDateFormat类的setTimeZone()方法可以设置时区。例如:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimeZone;
public class DateUtil {
public static String formatWithTimeZone(Calendar calendar, String format, TimeZone timeZone) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
sdf.setTimeZone(timeZone);
return sdf.format(calendar.getTime());
}
public static void main(String[] args) {
String format = "yyyy-MM-dd HH:mm:ss";
Calendar calendar = Calendar.getInstance();
TimeZone timeZone = TimeZone.getTimeZone("GMT+8");
System.out.println(formatWithTimeZone(calendar, format, timeZone));
}
}
在上面的代码中,我们定义了一个formatWithTimeZone()方法,用于将日历对象格式化为指定格式的字符串。此外,我们还定义了一个时区对象,并将其设置为东八区的时区(GMT+8)。然后在main()方法中,获取当前的日历对象,并使用定义的时区对象将其格式化为指定格式的字符串,并将其打印输出:
2022-02-23 16:07:09
三、示例
接下来,我用两个示例来说明如何使用SimpleDateFormat类进行时间格式化。
示例一:计算时间差
下面的代码展示了如何使用SimpleDateFormat类计算两个日期之间的时间差:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtil {
public static long getBetweenDays(String dateStr1, String dateStr2, String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date1 = sdf.parse(dateStr1);
Date date2 = sdf.parse(dateStr2);
long betweenDays = (date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24);
return Math.abs(betweenDays);
}
public static void main(String[] args) throws ParseException {
String format = "yyyy-MM-dd";
String dateStr1 = "2022-02-23";
String dateStr2 = "2022-02-01";
long betweenDays = getBetweenDays(dateStr1, dateStr2, format);
System.out.println(betweenDays);
}
}
在上面的代码中,我们定义了一个getBetweenDays()方法,用于计算两个日期相差的天数。首先,我们使用SimpleDateFormat类将两个日期字符串解析为Date对象,然后计算它们之间的时间差,并将其转换为天数。在main()方法中,我们定义了两个日期字符串,分别是“2022-02-23”和“2022-02-01”,然后调用getBetweenDays()方法计算它们之间的天数差,并将结果打印输出:
22
示例二:获取指定月份的最后一天
下面的代码展示了如何使用SimpleDateFormat类获取指定月份的最后一天:
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class DateUtil {
public static int getLastDayOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
return lastDay;
}
public static String getLastDayOfMonth(String dateStr, String format) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(dateStr));
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int lastDay = getLastDayOfMonth(year, month);
return sdf.format(sdf.parse(dateStr).getTime() + (lastDay - Integer.parseInt(sdf.format(sdf.parse(dateStr)).substring(dateStr.lastIndexOf("-") + 1))) * 24 * 3600 * 1000);
}
public static void main(String[] args) throws Exception {
String format = "yyyy-MM-dd";
String dateStr = "2022-02-23";
String lastDayOfMonth = getLastDayOfMonth(dateStr, format);
System.out.println(lastDayOfMonth);
}
}
在上面的代码中,我们定义了一个getLastDayOfMonth()方法,用于获取指定月份的最后一天。首先,我们使用Calendar类将传入的年份和月份设置为日历对象的属性,然后使用getActualMaximum()方法获取当月的最大天数。接着,我们将传入的日期字符串解析为Date对象,并使用Calendar类获取年份和月份,然后调用getLastDayOfMonth()方法获取当月的最后一天,并将结果返回。在main()方法中,我们定义了一个日期字符串“2022-02-23”,然后调用getLastDayOfMonth()方法获取当月的最后一天,并将结果打印输出:
2022-02-28
以上就是详解Java关于时间格式化的方法的完整攻略,包含了SimpleDateFormat类的基本用法、常用格式化方法、以及两个示例的详细讲解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java关于时间格式化的方法 - Python技术站