gpt4 book ai didi

java - Android 应用程序上的阿拉伯语日期

转载 作者:太空狗 更新时间:2023-10-29 13:24:16 27 4
gpt4 key购买 nike

我正在开发 android 应用程序,以及在应用程序上添加阿拉伯语的下一个版本,但我有一个问题。

这个问题是:Android操作系统转换日期动态 到阿拉伯语格式,我在 URL 参数中使用它,服务器无法读取它。

如何将任何阿拉伯日期转换为英文日期?!?

Android 操作系统向我展示了什么:١٤-٠٥-٢٠١٤
我需要的是:2014-05-14

我累了一些这样的Java行:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd",Locale.ENGLISH);

并且 Android 没有 Locale.Arabic 格式

将手机转换为阿拉伯语时出现问题

最佳答案

tl;博士

您所需的格式恰好在 ISO 8601 标准中定义。 java.time 类在解析/生成文本时默认使用标准格式。

LocalDate.now().toString()

2019-01-23



本地化到 English in the United States :
LocalDate
.now(
ZoneId.of( "America/Chicago" )
)
.format(
DateTimeFormatter.ofLocalizedDate(
FormatStyle.FULL // or LONG or MEDIUM or SHORT
)
.withLocale(
new Locale( "en" , "US" ) // English language, with cultural norms of United States.
)
)

对于 Arabic in Tunisia , 用:
new Locale( "ar" , "TN" )

避免遗留的日期时间类

您正在使用与最早版本的 Java bundle 在一起的糟糕的日期时间类。随着 JSR 310 的采用,它们被 java.time 类完全取代。对于早期的 Android,请参见下面底部的项目符号。
Locale

And Android doesn't has the Locale.Arabic format



许多语言环境中只有少数具有命名常量。学习指定 Locale由标准语言代码和国家(文化)代码组成,如 Locale 中所述类(class)。欲了解更多信息,请参阅 this related Question .

例如,对于 Arabic language with Saudi Arabia cultural norms , 用:
Locale locale = new Locale( "ar" , "SA" ) ;  // Arabic language. Saudi Arabia cultural norms.

我们可以使用该语言环境来本地化代表某个时刻的文本。
ZoneId z = ZoneId.of( "Pacific/Auckland" );  // By the way, time zone has *nothing* to do with locale, orthogonal issues.
ZonedDateTime zdt = ZonedDateTime.now( z );
Locale locale = new Locale( "ar" , "SA" );
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( locale );
String output = zdt.format( f );

跑的时候。

الجمعة، 18 يناير 2019 12:14:00 م توقيت نيوزيلندا الصيفي



要查看系统上可用的所有语言环境定义,请运行此代码。
    for ( Locale locale : Locale.getAvailableLocales() ) {
System.out.println( locale.toString() + " Name: " + locale.getDisplayName( Locale.US ) );
}

今天的英文日期

LocalDate class 表示没有日期时间且没有 time zone 的仅日期值或 offset-from-UTC .

时区对于确定日期至关重要。对于任何给定时刻,日期因地区而异。例如,午夜过后几分钟 Paris FranceMontréal Québec 中仍然是“昨天”是新的一天.

如果未指定时区,JVM 会隐式应用其当前默认时区。该默认值可能 change at any moment在运行时(!),因此您的结果可能会有所不同。最好将您想要/预期的时区明确指定为参数。

指定一个 proper time zone name格式为 Continent/Region ,例如 America/Montreal , Africa/Casablanca , 或 Pacific/Auckland .切勿使用 2-4 个字母的缩写,例如 ESTIST因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;  
LocalDate today = LocalDate.now( z ) ;

如果你想使用 JVM 当前的默认时区,请求它并作为参数传递。如果省略,代码读起来会变得模棱两可,因为我们不确定您是否打算使用默认值,或者您是否像许多程序员一样没有意识到这个问题。
ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

或指定日期。您可以通过数字设置月份,对于 1 月至 12 月,合理编号为 1-12。
LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.

或者,更好地使用 Month 枚举对象预定义,一年中的每个月一个。提示:使用这些 Month整个代码库中的对象,而不仅仅是一个整数,以使您的代码更具自文档性,确保有效值,并提供 type-safety .同上 Year & YearMonth .
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;

要生成本地化为英语的文本,请使用 DateTimeFormatter.ofLocalizedDate .
FormatStyle formatStyle = FormatStyle.FULL ;
Locale locale = new Locale( "en" , "US" ) ; // English language, United States cultural norms.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( formatStyle ).withLocale( locale );
String output = localDate.format( f ) ;

关于 java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在在 maintenance mode ,建议迁移到 java.time类。

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 上搜索许多示例和解释。规范为 JSR 310 .

您可以直接与您的数据库交换 java.time 对象。使用 JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.*类。

从哪里获得 java.time 类?
  • Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 ,以及更高版本 - 标准 Java API 的一部分,具有 bundle 的实现。
  • Java 9 添加了一些小功能和修复。
  • Java SE 6Java SE 7
  • 大多数 java.time 功能在 ThreeTen-Backport 中向后移植到 Java 6 和 7。 .
  • Android
  • 更高版本的 Android bundle 实现 java.time 类。
  • 对于早期的 Android (<26),ThreeTenABP项目适应 ThreeTen-Backport (上文提到的)。见 How to use ThreeTenABP… .

  • ThreeTen-Extra项目使用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

    关于java - Android 应用程序上的阿拉伯语日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23612392/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com