Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日期格式:带点的月份缩写_Java_Formatting - Fatal编程技术网

Java 日期格式:带点的月份缩写

Java 日期格式:带点的月份缩写,java,formatting,Java,Formatting,我有一个日期格式模式:mmmyyy 我想要的是:如果月名被剪短,名字后面会印上一个点。但是,如果月份名称没有缩短,则不会添加点 例如: 2010年5月应打印:2010年5月(无圆点)--May只有3个字母长,因此不需要圆点,因为它不是缩写 2010年12月2100日应打印:2010年12月(带圆点)——12月的长度超过3个字母,因此需要一个圆点,因为它是一个缩写 对于模式,这是可能的,还是我需要“手动”实现它?您可以在格式化程序中使用一个自定义项,在该自定义项中,您使用包含“May”而不是“

我有一个日期格式模式:
mmmyyy

我想要的是:如果月名被剪短,名字后面会印上一个点。但是,如果月份名称没有缩短,则不会添加点

例如:

  • 2010年5月应打印:
    2010年5月
    (无圆点)--May只有3个字母长,因此不需要圆点,因为它不是缩写
  • 2010年12月2100日应打印:
    2010年12月
    (带圆点)——12月的长度超过3个字母,因此需要一个圆点,因为它是一个缩写

对于模式,这是可能的,还是我需要“手动”实现它?

您可以在格式化程序中使用一个自定义项,在该自定义项中,您使用包含“May”而不是“May”的短月数组覆盖短月数组


更新:很抱歉,我最后一点弄错了,当然应该是相反的,短月份最初是“一月”、“二月”等,除五月外,每个月都应该用“一月”、“二月”来代替。

我已经实现了biziclop。--它起作用了

如果有人感兴趣,请点击这里:

import static org.junit.Assert.assertEquals;

import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

import org.junit.Test;

public class DateFormatTest {

    /** The locale where the tests are for. */
    private static final Locale locale = Locale.ENGLISH;

    /**
     * Add a dot to all abbricated short months.
     *
     * @param dateFormatSymbols
     * @return
     */
    private final DateFormatSymbols addDotToAbbricationMonths(final DateFormatSymbols dateFormatSymbols) {

        String[] shortMonths = dateFormatSymbols.getShortMonths();
        for (int i = 0; i < shortMonths.length; i++) {
            if (dateFormatSymbols.getMonths()[i].length() > shortMonths[i].length()) {
                shortMonths[i] += '.';
            }
        }
        dateFormatSymbols.setShortMonths(shortMonths);

        return dateFormatSymbols;
    }

    /** pattern under test. */
    final DateFormat format = new SimpleDateFormat("MMM yyyy", addDotToAbbricationMonths(new DateFormatSymbols(locale)));

    /** Scenario: May is only 3 letters long, so there is no dot needed, because it is not an abbreviation. */
    @Test
    public void testShortEnought() {
        Date firstMay = new GregorianCalendar(2010, Calendar.MAY, 1).getTime();

        assertEquals("May 2010", format.format(firstMay));
    }

    /** Scenario: December is more than 3 letters long, so there is a dot needed, because it an abbreviation. */
    @Test
    public void testToLong() {
        Date firstDecember = new GregorianCalendar(2010, Calendar.DECEMBER, 1).getTime();

        assertEquals("Dec. 2010", format.format(firstDecember));
    }

    /** Scenario: if the DateFormatSymbols are changed for this special, it should not influence the other formatter. */
    @Test
    public void noInfluence() {
        Date firstDecember = new GregorianCalendar(2010, Calendar.DECEMBER, 1).getTime();

        assertEquals("Dec 2010", new SimpleDateFormat("MMM yyyy", locale).format(firstDecember));
    }
}
导入静态org.junit.Assert.assertEquals;
导入java.text.DateFormat;
导入java.text.DateFormatSymbols;
导入java.text.simpleDataFormat;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.GregorianCalendar;
导入java.util.Locale;
导入org.junit.Test;
公共类数据格式测试{
/**测试所在的区域设置*/
私有静态最终语言环境=Locale.ENGLISH;
/**
*在所有缩写的短月份中添加一个点。
*
*@param-dateFormatSymbols
*@返回
*/
专用最终日期格式符号添加点到月份(最终日期格式符号日期格式符号){
String[]shortMonths=dateFormatSymbols.getShortMonths();
for(int i=0;ishortMonths[i].length()){
短月[i]+=';
}
}
dateFormatSymbols.setShortMonths(短月);
返回日期格式符号;
}
/**正在测试的模式*/
最终日期格式=新的简化格式(“MMM yyyy”,addDotToAbbricationMonths(新的日期格式符号(区域设置));
/**场景:May只有3个字母长,所以不需要点,因为它不是缩写*/
@试验
公共无效测试shortenought(){
Date firstMay=新的GregorianCalendar(2010,Calendar.MAY,1).getTime();
assertEquals(“2010年5月”,format.format(firstMay));
}
/**场景:12月的长度超过3个字母,因此需要一个点,因为它是一个缩写*/
@试验
公屋{
Date firstDecember=新的GregorianCalendar(2010,Calendar.DECEMBER,1).getTime();
资产质量(“2010年12月”,format.format(12月1日));
}
/**场景:如果为此特殊设置更改了DateFormatSymbols,则不应影响其他格式化程序*/
@试验
公共无效无影响(){
Date firstDecember=新的GregorianCalendar(2010,Calendar.DECEMBER,1).getTime();
assertEquals(“2010年12月”,新的SimpleDataFormat(“MMM yyyy”,locale).format(12月1日));
}
}