繁体   English   中英

按月输出可读的月日时间

[英]Output readable day-of-month with joda-time

我正在尝试获取jodatime DateTime对象以所需的格式输出。 目前,我的格式字符串为:

dt.toString("EEEE dd\nMMMM YYYY");

输出为:

Wednesday 04
June 2014

但是,我想显示带后缀的DAY ,例如:

1st2nd日, 3rd4th

是否有使用jodatime进行此操作的内置方法,还是我必须为此编写自己的函数?

根据JodaTime网站( http://www.joda.org/joda-time/key_format.html )上的文档判断,似乎没有内置函数可以执行此格式。

可以在此处看到类似的问题,以获取有关如何手动进行格式化的示例- 在Java中如何格式化月份中的“ 11日”,“ 21日”或“ 23日”? (普通指示器)

DateTime dt = new DateTime();
String formatFirst = "EEEE dd'st'\nMMMM YYYY";
String formatSecond = "EEEE dd'nd'\nMMMM YYYY";
String formatThird = "EEEE dd'rd'\nMMMM YYYY";
String formatStd = "EEEE dd'th'\nMMMM YYYY";

String pattern;

switch (dt.getDayOfMonth()) {
  case 1:
  case 21:
  case 31:
    pattern = formatFirst;
    break;
  case 2:
  case 22:
    pattern = formatSecond;
    break;
  case 3:
  case 23:
    pattern = formatThird;
    break;
  default:
    pattern = formatStd;
}

String output = dt.toString(pattern, Locale.ENGLISH);
System.out.println(output);

这是此答案的类似Kotlin版本。 这仅输出月份(包括其序数)。

fun getDayOfMonthDayWithOrdinal(date: DateTime): String {
        val formatter = DateTimeFormat.forPattern("dd")
        val monthDay = formatter.print(date).toInt()
        return when (monthDay) {
            1, 21, 31 -> "${monthDay}st"
            2, 22 -> "${monthDay}nd"
            3, 23 -> "${monthDay}rd"
            else -> "${monthDay}th"
        }
    }

您将为此实现自己的DateTimeFormatterBuilder

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM