mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
add method
This commit is contained in:
parent
9355f43af9
commit
e0e07c726f
@ -1,6 +1,7 @@
|
|||||||
package cn.hutool.core.date;
|
package cn.hutool.core.date;
|
||||||
|
|
||||||
import cn.hutool.core.comparator.CompareUtil;
|
import cn.hutool.core.comparator.CompareUtil;
|
||||||
|
import cn.hutool.core.convert.NumberChineseFormatter;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
@ -389,6 +390,57 @@ public class CalendarUtil {
|
|||||||
return age(birthday.getTimeInMillis(), dateToCompare.getTimeInMillis());
|
return age(birthday.getTimeInMillis(), dateToCompare.getTimeInMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将指定Calendar时间格式化为纯中文形式,比如:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* 2018-02-24 12:13:14转换为 二〇一八年二月二十四日(withTime为false)
|
||||||
|
* 2018-02-24 12:13:14 转换为 二〇一八年二月二十四日一十二时一十三分一十四秒(withTime为true)
|
||||||
|
* </pre>
|
||||||
|
* @param calendar {@link Calendar}
|
||||||
|
* @param withTime 是否包含时间部分
|
||||||
|
* @return 格式化后的字符串
|
||||||
|
* @since 5.3.9
|
||||||
|
*/
|
||||||
|
public static String formatChineseDate(Calendar calendar, boolean withTime){
|
||||||
|
final StringBuilder result = StrUtil.builder();
|
||||||
|
|
||||||
|
// 年
|
||||||
|
String year = String.valueOf(calendar.get(Calendar.YEAR));
|
||||||
|
final int length = year.length();
|
||||||
|
for(int i = 0;i < length; i++){
|
||||||
|
result.append(NumberChineseFormatter.numberCharToChinese(year.charAt(i), false));
|
||||||
|
}
|
||||||
|
result.append('年');
|
||||||
|
|
||||||
|
// 月
|
||||||
|
int month = calendar.get(Calendar.MONTH) + 1;
|
||||||
|
result.append(NumberChineseFormatter.format(month, false));
|
||||||
|
result.append('月');
|
||||||
|
|
||||||
|
// 日
|
||||||
|
int day = calendar.get(Calendar.DAY_OF_MONTH);
|
||||||
|
result.append(NumberChineseFormatter.format(day, false));
|
||||||
|
result.append('日');
|
||||||
|
|
||||||
|
if(withTime){
|
||||||
|
// 时
|
||||||
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
||||||
|
result.append(NumberChineseFormatter.format(hour, false));
|
||||||
|
result.append('时');
|
||||||
|
// 分
|
||||||
|
int minute = calendar.get(Calendar.MINUTE);
|
||||||
|
result.append(NumberChineseFormatter.format(minute, false));
|
||||||
|
result.append('分');
|
||||||
|
// 秒
|
||||||
|
int second = calendar.get(Calendar.SECOND);
|
||||||
|
result.append(NumberChineseFormatter.format(second, false));
|
||||||
|
result.append('秒');
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.toString().replace('零', '〇');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄
|
* 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄
|
||||||
*
|
*
|
||||||
|
@ -2,7 +2,6 @@ package cn.hutool.core.date;
|
|||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.comparator.CompareUtil;
|
import cn.hutool.core.comparator.CompareUtil;
|
||||||
import cn.hutool.core.convert.Convert;
|
|
||||||
import cn.hutool.core.date.format.DateParser;
|
import cn.hutool.core.date.format.DateParser;
|
||||||
import cn.hutool.core.date.format.DatePrinter;
|
import cn.hutool.core.date.format.DatePrinter;
|
||||||
import cn.hutool.core.date.format.FastDateFormat;
|
import cn.hutool.core.date.format.FastDateFormat;
|
||||||
@ -613,65 +612,19 @@ public class DateUtil extends CalendarUtil {
|
|||||||
* @param date 被格式化的日期
|
* @param date 被格式化的日期
|
||||||
* @param isUppercase 是否采用大写形式
|
* @param isUppercase 是否采用大写形式
|
||||||
* @return 中文日期字符串
|
* @return 中文日期字符串
|
||||||
* @since 4.1.19
|
* @since 5.3.9
|
||||||
*/
|
*/
|
||||||
public static String formatChineseDate(Date date, boolean isUppercase) {
|
public static String formatChineseDate(Date date, boolean isUppercase, boolean withTime) {
|
||||||
if (null == date) {
|
if (null == date) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
String format = DatePattern.CHINESE_DATE_FORMAT.format(date);
|
if (false == isUppercase) {
|
||||||
if (isUppercase) {
|
return (withTime ? DatePattern.CHINESE_DATE_TIME_FORMAT : DatePattern.CHINESE_DATE_FORMAT).format(date);
|
||||||
final StringBuilder builder = StrUtil.builder(format.length());
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(0, 1)), false));
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(1, 2)), false));
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(2, 3)), false));
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(3, 4)), false));
|
|
||||||
builder.append(format, 4, 5);
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(5, 7)), false));
|
|
||||||
builder.append(format, 7, 8);
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(8, 10)), false));
|
|
||||||
builder.append(format.substring(10));
|
|
||||||
format = builder.toString().replace('零', '〇');
|
|
||||||
}
|
}
|
||||||
return format;
|
|
||||||
|
return CalendarUtil.formatChineseDate(CalendarUtil.calendar(date), withTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 格式化为中文日期格式,如果isUppercase为false,则返回类似:2018年10月24日12时13分14秒,否则返回二〇一八年二月二十四日一十二时一十三分一十四秒
|
|
||||||
*
|
|
||||||
* @param date 被格式化的日期
|
|
||||||
* @param isUppercase 是否采用大写形式
|
|
||||||
* @return 中文日期时间串字符串
|
|
||||||
* @since 5.3.7
|
|
||||||
*/
|
|
||||||
public static String formatChineseDateTime(Date date, boolean isUppercase) {
|
|
||||||
if (null == date) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String format = DatePattern.CHINESE_DATE_TIME_FORMAT.format(date);
|
|
||||||
if (isUppercase) {
|
|
||||||
final StringBuilder builder = StrUtil.builder(format.length());
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(0, 1)), false));
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(1, 2)), false));
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(2, 3)), false));
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(3, 4)), false));
|
|
||||||
builder.append(format, 4, 5);
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(5, 7)), false));
|
|
||||||
builder.append(format, 7, 8);
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(8, 10)), false));
|
|
||||||
builder.append(format, 10, 11);
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(11, 13)), false));
|
|
||||||
builder.append(format, 13, 14);
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(14, 16)), false));
|
|
||||||
builder.append(format, 16, 17);
|
|
||||||
builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(17, 19)), false));
|
|
||||||
builder.append(format.substring(19));
|
|
||||||
format = builder.toString().replace('零', '〇');
|
|
||||||
}
|
|
||||||
return format;
|
|
||||||
}
|
|
||||||
// ------------------------------------ Format end ----------------------------------------------
|
// ------------------------------------ Format end ----------------------------------------------
|
||||||
|
|
||||||
// ------------------------------------ Parse start ----------------------------------------------
|
// ------------------------------------ Parse start ----------------------------------------------
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
package cn.hutool.core.date;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
|
public class CalendarUtilTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void formatChineseDate(){
|
||||||
|
Calendar calendar = DateUtil.parse("2018-02-24 12:13:14").toCalendar();
|
||||||
|
final String chineseDate = CalendarUtil.formatChineseDate(calendar, false);
|
||||||
|
Assert.assertEquals("二〇一八年二月二十四日", chineseDate);
|
||||||
|
final String chineseDateTime = CalendarUtil.formatChineseDate(calendar, true);
|
||||||
|
Assert.assertEquals("二〇一八年二月二十四日一十二时一十三分一十四秒", chineseDateTime);
|
||||||
|
}
|
||||||
|
}
|
@ -220,13 +220,13 @@ public class DateUtilTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void formatChineseDateTest() {
|
public void formatChineseDateTest() {
|
||||||
String formatChineseDate = DateUtil.formatChineseDate(DateUtil.parse("2018-02-24"), true);
|
String formatChineseDate = DateUtil.formatChineseDate(DateUtil.parse("2018-02-24"), true, false);
|
||||||
Assert.assertEquals("二〇一八年二月二十四日", formatChineseDate);
|
Assert.assertEquals("二〇一八年二月二十四日", formatChineseDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void formatChineseDateTimeTest() {
|
public void formatChineseDateTimeTest() {
|
||||||
String formatChineseDateTime = DateUtil.formatChineseDateTime(DateUtil.parse("2018-02-24 12:13:14"), true);
|
String formatChineseDateTime = DateUtil.formatChineseDate(DateUtil.parse("2018-02-24 12:13:14"), true, true);
|
||||||
Assert.assertEquals("二〇一八年二月二十四日一十二时一十三分一十四秒", formatChineseDateTime);
|
Assert.assertEquals("二〇一八年二月二十四日一十二时一十三分一十四秒", formatChineseDateTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user