Java 如何在不更改应用程序语言的情况下将时间格式从英语更改为孟加拉语?

Java 如何在不更改应用程序语言的情况下将时间格式从英语更改为孟加拉语?,java,android,datetime-format,Java,Android,Datetime Format,如何在不更改应用程序语言的情况下将时间格式从英语更改为孟加拉语?获取日期格式化程序时,使用bn IN语言标记指定Locale ULocale bangla = ULocale.forLanguageTag("bn-IN"); SimpleDateFormat timeFormat = SimpleDateFormat.getTimeInstance(DateFormat.LONG, bangla); 获取日期格式化程序时,使用bn IN语言标记指定Locale ULocale bangla =

如何在不更改应用程序语言的情况下将时间格式从英语更改为孟加拉语?

获取日期格式化程序时,使用
bn IN
语言标记指定
Locale

ULocale bangla = ULocale.forLanguageTag("bn-IN");
SimpleDateFormat timeFormat = SimpleDateFormat.getTimeInstance(DateFormat.LONG, bangla);

获取日期格式化程序时,使用
bn IN
语言标记指定
Locale

ULocale bangla = ULocale.forLanguageTag("bn-IN");
SimpleDateFormat timeFormat = SimpleDateFormat.getTimeInstance(DateFormat.LONG, bangla);

理论上,这应该是可行的:

    Locale bangla = Locale.forLanguageTag("bn-BD");
    DateTimeFormatter timeFormatter = DateTimeFormatter
            .ofLocalizedTime(FormatStyle.FULL)
            .withLocale(bangla);
    String formattedTime
            = ZonedDateTime.now(ZoneId.of("Asia/Dhaka")).format(timeFormatter);
    System.out.println(formattedTime);
但是,我的桌面Java 7上的输出是:

英国时间下午2:29:21

也就是说,我看不出和英语有什么区别

在Java 9上,我确实得到了一个区别:

10:32:00অপরাহ্ণ বাংলাদেশ মানক সময়

我不敢说你在Android上得到了什么,但你可以试试

您可以指定
.SHORT
MEDIUM
LONG
,而不是
FormatStyle.FULL
,具体取决于所需格式的长度

我正在使用Threen Backport,java.time的Backport,现代java日期和时间API,用于Java6和Java7。对于较旧的Android(API级别26下),使用相同的ThreeTenABP的Android自适应。请参阅底部的链接

我使用语言标签bn BD表示孟加拉国的孟加拉语(孟加拉语)。如果您不想指定一个国家,您也可以单独尝试
bn
,或者
bn IN
表示印度的孟加拉语。这可能会也可能不会有什么不同

链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

理论上,这应该是可行的:

    Locale bangla = Locale.forLanguageTag("bn-BD");
    DateTimeFormatter timeFormatter = DateTimeFormatter
            .ofLocalizedTime(FormatStyle.FULL)
            .withLocale(bangla);
    String formattedTime
            = ZonedDateTime.now(ZoneId.of("Asia/Dhaka")).format(timeFormatter);
    System.out.println(formattedTime);
但是,我的桌面Java 7上的输出是:

英国时间下午2:29:21

也就是说,我看不出和英语有什么区别

在Java 9上,我确实得到了一个区别:

10:32:00অপরাহ্ণ বাংলাদেশ মানক সময়

我不敢说你在Android上得到了什么,但你可以试试

您可以指定
.SHORT
MEDIUM
LONG
,而不是
FormatStyle.FULL
,具体取决于所需格式的长度

我正在使用Threen Backport,java.time的Backport,现代java日期和时间API,用于Java6和Java7。对于较旧的Android(API级别26下),使用相同的ThreeTenABP的Android自适应。请参阅底部的链接

我使用语言标签bn BD表示孟加拉国的孟加拉语(孟加拉语)。如果您不想指定一个国家,您也可以单独尝试
bn
,或者
bn IN
表示印度的孟加拉语。这可能会也可能不会有什么不同

链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

这是一个Kotlin扩展功能。使用这个你可以把任何英文数字转换成孟加拉语

fun String.englishNumberChangeToBanglaNumber(): String {
    val hash = HashMap<Int, String>()
    hash[0] = "০"
    hash[1] = "১"
    hash[2] = "২"
    hash[3] = "৩"
    hash[4] = "৪"
    hash[5] = "৫"
    hash[6] = "৬"
    hash[7] = "৭"
    hash[8] = "৮"
    hash[9] = "৯"
    var banglaDate = ""
    this.forEach {
        try {
            val digit = it.toString().toInt()
            banglaDate += hash[digit]
        } catch (e: Exception) {
            banglaDate += it
        }
    }
    return banglaDate

}
输出:
১০/১২/২০২০


确保字符串是英文的。

这是一个Kotlin扩展函数。使用这个你可以把任何英文数字转换成孟加拉语

fun String.englishNumberChangeToBanglaNumber(): String {
    val hash = HashMap<Int, String>()
    hash[0] = "০"
    hash[1] = "১"
    hash[2] = "২"
    hash[3] = "৩"
    hash[4] = "৪"
    hash[5] = "৫"
    hash[6] = "৬"
    hash[7] = "৭"
    hash[8] = "৮"
    hash[9] = "৯"
    var banglaDate = ""
    this.forEach {
        try {
            val digit = it.toString().toInt()
            banglaDate += hash[digit]
        } catch (e: Exception) {
            banglaDate += it
        }
    }
    return banglaDate

}
输出:
১০/১২/২০২০


确保您的字符串是英文的。

它是否适用于
bn
(无国家/地区的孟加拉语)或
bn BD
(孟加拉语/孟加拉国)?您已经看到了这个问题:有没有一个解决方案没有臭名昭著的麻烦和过时的
SimpleDateFormat
class?@OleV.V。是的,
bn
bn-BD
bn-IN
中的所有3个都可以工作。要使用更好的日期/时间API,请使用。它是否可以与
bn
(无国家/地区的孟加拉语)或
bn BD
(孟加拉/孟加拉语)一起使用?您已经看到了这个问题:有没有一个解决方案没有臭名昭著的麻烦和过时的
SimpleDateFormat
class?@OleV.V。是的,
bn
bn-BD
bn-IN
中的所有3个都可以工作。要使用更好的日期/时间API,请使用。