具有序数指示符的Java DateFormat

pkln4tw6  于 2022-12-02  发布在  Java
关注(0)|答案(1)|浏览(124)

我试着更新一些东西(是 * SimpleDateFormat * 的法语版本)。这是我第一次在那里发帖,所以请善待
这是我的代码,它的工作经过这么多的尝试!
创建一个方法来更改第一天(在法国为1er):

public static String dateSuffix(final Calendar calendar) {
    final int date = calendar.get(Calendar.DATE);
    if (date % 30 == 1) if (date == 1) return "er";
    return "";
}

在此处添加方法:

public String getDateAttestation() {
    DateFormat formaterDateAttest = new SimpleDateFormat("EEEE d'%s' MMMM yyyy", Locale.FRANCE);
    return String.format(formaterDateAttest.format(dateAttestation.getDateEditor().getDate()), dateSuffix(dateAttestation.getCalendar()));
}

我的视图中的所有内容都链接到JDateChooser():

dateAttestation = new JDateChooser();
dateAttestation.setDateFormatString("dd MMMM yyyy");
dateAttestation.setCalendar(Calendar.getInstance()); // set la date du jour dans le frame

你觉得这样合适吗?我应该改进什么?
谢谢大家
用社区经验优化我的代码。

    • 更新**

我复制了Arvind Kumar Avinash提供的代码。我现在的问题是,我必须导入一个日期选择与JDateChooser工具在我的框架之前显示。
然后解析getter:

public Date getDateAttestation(Date ignoredDate) {
        return dateAttestation.getDateEditor().getDate();
    }

所以

public String getDateAttestation() {
        Date date = new Date();
        date = getDateAttestation(date);
        OffsetDateTime odtDateAttest = date.toInstant().atOffset(ZoneOffset.UTC);
        DateTimeFormatter daformatter = DateTimeFormatter.ofPattern(String.format("EEEE d'%s' MMMM uuuu", dateSuffix(odtDateAttest.getDayOfMonth())), Locale.FRANCE);
        return odtDateAttest.format(daformatter);
    }

对于"jeudi 1er decembre 2022"工作得很好,但从这个方法中给我"vendredi 2 'decembre 2022":

static String dateSuffix(final int dayOfMonth) {
        return (dayOfMonth % 30 == 1 || dayOfMonth == 1) ? "er" : "";
    }

如果我在

: " ";
    }

我也在我的结果中得到了一个空间,但我不想那样,有什么想法吗?:)

2lpgd968

2lpgd9681#

java.时间

java.time API于2014年3月随Java-8一起发布,取代了error-prone legacy date-time API。从那时起,强烈推荐使用这种现代的日期-时间API。
如果您正在获取java.util.Date的示例,则可以通过使用Date#toInstant将其转换为Instant来切换到现代日期-时间API。

演示

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(getDateAttestation(new Date()));
    }

    static String getDateAttestation(Date date) {
        // In your case, it is
        // Date date = dateAttestation.getDateEditor().getDate();
        OffsetDateTime odt = date.toInstant().atOffset(ZoneOffset.UTC);
        DateTimeFormatter formatter = DateTimeFormatter
                .ofPattern(String.format("EEEE d'%s' MMMM uuuu", dateSuffix(odt.getDayOfMonth())), Locale.FRANCE);
        return odt.format(formatter);
    }

    static String dateSuffix(final int dayOfMonth) {
        return (dayOfMonth % 30 == 1 || dayOfMonth == 1) ? "er" : "\0";
    }
}

输出

jeudi 1er décembre 2022

从**Trail: Date Time**了解有关现代日期-时间API的更多信息。

相关问题