ZetCode

Java ThaiBuddhistChronology 类

最后修改时间:2025 年 4 月 16 日

java.time.chrono.ThaiBuddhistChronology 类实现了泰国佛教日历系统。 这个历法主要在泰国使用。 它是一个阳历,年份从佛陀诞生之日起计算。

在泰国佛教日历中,公元 2025 年对应佛历 2568 年 (BE)。 该日历与 ISO 日历共享相同的月份和日期结构,但在年份编号上有所不同。

ThaiBuddhistChronology 类概述

ThaiBuddhistChronology 提供了根据泰国佛教日历创建日期和时间的方法。 它实现了 Chronology 接口,并遵循与其他历法实现相同的模式。

public final class ThaiBuddhistChronology extends AbstractChronology {
    public static ThaiBuddhistChronology INSTANCE;
    public static ThaiBuddhistDate now();
    public static ThaiBuddhistDate now(ZoneId zone);
    public static ThaiBuddhistDate of(int prolepticYear, int month, int dayOfMonth);
    public static ThaiBuddhistDate from(TemporalAccessor temporal);
    public static ThaiBuddhistDate dateEpochDay(long epochDay);
    public int prolepticYear(Era era, int yearOfEra);
    public ThaiBuddhistEra eraOf(int eraValue);
    public List<Era> eras();
}

上面的代码显示了 ThaiBuddhistChronology 提供的关键方法。 这些方法允许在泰国佛教日历中创建和转换日期。 该历法遵循与其他 Java 时间类相同的模式。

创建 ThaiBuddhistDate 对象

泰国佛教日期可以通过多种方式创建。 最常见的方法是使用 now 获取当前日期,以及使用工厂方法获取特定日期。 也支持从 ISO 日期的转换。

Main.java
package com.zetcode; 

import java.time.chrono.ThaiBuddhistDate;
import java.time.LocalDate;
import java.time.ZoneId;

public class Main {

    public static void main(String[] args) {
        
        // Current date
        ThaiBuddhistDate now = ThaiBuddhistDate.now();
        System.out.println("Current Thai date: " + now);
        
        // Specific date
        ThaiBuddhistDate date = ThaiBuddhistDate.of(2568, 4, 16);
        System.out.println("Specific Thai date: " + date);
        
        // From ISO date
        ThaiBuddhistDate fromIso = ThaiBuddhistDate.from(LocalDate.now());
        System.out.println("From ISO date: " + fromIso);
        
        // With timezone
        ThaiBuddhistDate zoned = ThaiBuddhistDate.now(ZoneId.of("Asia/Bangkok"));
        System.out.println("In Bangkok: " + zoned);
    }
}

此示例演示了创建 ThaiBuddhistDate 对象的不同方法。 输出显示了泰国佛教格式的日期。 年份比 ISO 日历年提前 543 年。

在日历之间转换

可以在泰国佛教日历和 ISO 日历之间转换日期。 当与使用不同日历系统的系统一起工作时,这很有用。

Main.java
package com.zetcode; 

import java.time.chrono.ThaiBuddhistDate;
import java.time.LocalDate;

public class Main {

    public static void main(String[] args) {

        ThaiBuddhistDate thaiDate = ThaiBuddhistDate.now();
        System.out.println("Thai Buddhist date: " + thaiDate);
        
        // Convert to ISO
        LocalDate isoDate = LocalDate.from(thaiDate);
        System.out.println("ISO date: " + isoDate);
        
        // Convert back to Thai
        ThaiBuddhistDate backToThai = ThaiBuddhistDate.from(isoDate);
        System.out.println("Back to Thai: " + backToThai);
        
        // Compare years
        System.out.println("Thai year: " + thaiDate.get(ThaiBuddhistDate.YEAR));
        System.out.println("ISO year: " + isoDate.getYear());
    }
}

此示例显示了泰国佛教日历和 ISO 日历之间的转换。 同一天以不同的年份编号在两个系统中表示。 月份和日期组件在两个日历中保持不变。

使用纪元

泰国佛教日历有一个纪元:BE (佛历)。 ThaiBuddhistEra 枚举表示这个纪元。 提供了与纪元相关的方法,以便与其他历法实现兼容。

Main.java
package com.zetcode; 

import java.time.chrono.ThaiBuddhistDate;
import java.time.chrono.ThaiBuddhistEra;

public class Main {

    public static void main(String[] args) {

        ThaiBuddhistDate date = ThaiBuddhistDate.now();
        
        // Get era
        ThaiBuddhistEra era = date.getEra();
        System.out.println("Era: " + era);
        
        // Check era
        System.out.println("Is BE: " + (era == ThaiBuddhistEra.BE));
        
        // Create date with era
        ThaiBuddhistDate eraDate = ThaiBuddhistDate.of(era, 2568, 4, 16);
        System.out.println("Date with era: " + eraDate);
        
        // List available eras
        System.out.println("Available eras: " + 
            ThaiBuddhistChronology.INSTANCE.eras());
    }
}

此示例演示了在泰国佛教日历中使用纪元。 BE 纪元是此系统中唯一的纪元。 提供了纪元方法,以便与其他历法实现保持一致性。

日期算术

泰国佛教日期支持时间算术运算。 这些运算与 ISO 日历类似,但保持泰国佛教的年份计数。

Main.java
package com.zetcode; 

import java.time.chrono.ThaiBuddhistDate;
import java.time.temporal.ChronoUnit;

public class Main {

    public static void main(String[] args) {

        ThaiBuddhistDate today = ThaiBuddhistDate.now();
        System.out.println("Today: " + today);
        
        // Add days
        ThaiBuddhistDate tomorrow = today.plus(1, ChronoUnit.DAYS);
        System.out.println("Tomorrow: " + tomorrow);
        
        // Add months
        ThaiBuddhistDate nextMonth = today.plus(1, ChronoUnit.MONTHS);
        System.out.println("Next month: " + nextMonth);
        
        // Add years
        ThaiBuddhistDate nextYear = today.plus(1, ChronoUnit.YEARS);
        System.out.println("Next year: " + nextYear);
        
        // Subtract weeks
        ThaiBuddhistDate lastWeek = today.minus(1, ChronoUnit.WEEKS);
        System.out.println("Last week: " + lastWeek);
    }
}

此示例显示了使用泰国佛教日期的各种时间算术运算。 这些运算在调整日期的同时保持了泰国佛教的年份计数。 支持所有标准的时间单位。

格式化和解析

泰国佛教日期可以使用 DateTimeFormatter 进行格式化和解析。 可以配置格式化程序以根据泰国惯例显示日期。

Main.java
package com.zetcode; 

import java.time.chrono.ThaiBuddhistDate;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {

        ThaiBuddhistDate date = ThaiBuddhistDate.now();
        
        // Default format
        System.out.println("Default format: " + date);
        
        // Format with pattern
        DateTimeFormatter patternFormat = 
            DateTimeFormatter.ofPattern("G yyyy-MM-dd");
        System.out.println("Pattern format: " + date.format(patternFormat));
        
        // Localized format
        DateTimeFormatter thaiFormat = DateTimeFormatter
            .ofLocalizedDate(FormatStyle.FULL)
            .withLocale(new Locale("th", "TH"))
            .withChronology(ThaiBuddhistChronology.INSTANCE);
        System.out.println("Thai format: " + date.format(thaiFormat));
        
        // Parse from string
        ThaiBuddhistDate parsed = ThaiBuddhistDate.parse("BE 2568-04-16");
        System.out.println("Parsed date: " + parsed);
    }
}

此示例演示了格式化和解析泰国佛教日期。 本地化格式显示了泰语和惯例的日期。 解析器可以读取各种格式的日期。

比较日期

泰国佛教日期可以使用标准比较方法进行比较。 比较考虑了完整的日期,包括年、月和日。

Main.java
package com.zetcode; 

import java.time.chrono.ThaiBuddhistDate;
import java.time.temporal.ChronoUnit;

public class Main {

    public static void main(String[] args) {

        ThaiBuddhistDate today = ThaiBuddhistDate.now();
        ThaiBuddhistDate tomorrow = today.plus(1, ChronoUnit.DAYS);
        ThaiBuddhistDate yesterday = today.minus(1, ChronoUnit.DAYS);
        
        // Comparison methods
        System.out.println("Is today before tomorrow? " + today.isBefore(tomorrow));
        System.out.println("Is today after yesterday? " + today.isAfter(yesterday));
        System.out.println("Compare today and tomorrow: " + today.compareTo(tomorrow));
        
        // Equality check
        System.out.println("Is today equal to now? " + 
            today.equals(ThaiBuddhistDate.now()));
    }
}

此示例显示了比较泰国佛教日期的各种方法。 比较方法与其他 Java 时间类类似。 相等性要求所有日期组件完全匹配。

来源

Java ThaiBuddhistChronology 文档

在本文中,我们介绍了 Java ThaiBuddhistChronology 类的基本方法和特性。 理解这些概念对于在泰国和其他使用该日历系统的地区处理日期至关重要。

作者

我叫 Jan Bodnar,是一位经验丰富的程序员,在该领域拥有多年的经验。 我从 2007 年开始撰写编程文章,至今已撰写了 1,400 多篇文章和八本电子书。 凭借超过八年的教学经验,我致力于分享我的知识并帮助其他人掌握编程概念。

列出所有Java教程