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

2024-02-23

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

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

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

Android 操作系统向我显示的内容:١٤-٠٥-٢٠١٤
我需要的是:2014-05-14

我厌倦了像这样的一些Java行:

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

Android 没有 Locale.Arabic 格式

当您将手机转换为阿拉伯语时会出现此问题


tl;dr

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

LocalDate.now().toString()

2019-01-23

本地化到在美国的英语 http://www.localeplanet.com/java/en-US/:

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. 
    )
)

For 突尼斯的阿拉伯语 http://www.localeplanet.com/java/ar-TN/index.html, use:

new Locale( "ar" , "TN" )

避免遗留日期时间类

您正在使用与最早版本的 Java 捆绑在一起的糟糕的日期时间类。他们完全被java.time采用 JSR 310 的类。对于早期的 Android,请参阅下面底部的项目符号。

Locale

Android 没有 Locale.Arabic 格式

众多语言环境中只有少数具有命名常量。学习指定一个Locale由标准语言代码和国家(文化)代码,如Locale https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html班级。欲了解更多信息,请参阅这个相关问题 https://stackoverflow.com/q/20844525/642706.

例如,对于符合沙特阿拉伯文化规范的阿拉伯语 http://www.localeplanet.com/java/ar-SA/index.html, use:

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 );

运行时。

2019 年 18 月 12:14:00 于 2019 年 12 月 18 日

要查看系统上可用的所有区域设置定义,请运行此代码。

    for ( Locale locale : Locale.getAvailableLocales() ) {
        System.out.println( locale.toString() + "  Name: " + locale.getDisplayName( Locale.US ) );
    }

今天的英语日期

The LocalDate https://docs.oracle.com/javase/10/docs/api/java/time/LocalDate.html类表示仅日期值,没有日期和时间时区 https://en.wikipedia.org/wiki/Time_zone or 与 UTC 的偏移量 https://en.wikipedia.org/wiki/UTC_offset.

时区对于确定日期至关重要。对于任何特定时刻,全球各地的日期都会因地区而异。例如,午夜过后几分钟法国巴黎 https://en.wikipedia.org/wiki/Europe/Paris又是新的一天,但仍是“昨天”魁北克省 蒙特利尔 https://en.wikipedia.org/wiki/America/Montreal.

如果未指定时区,JVM 会隐式应用其当前的默认时区。该默认值可能随时改变 https://docs.oracle.com/javase/10/docs/api/java/util/TimeZone.html#getDefault()在运行时(!),所以你的结果可能会有所不同。最好明确指定您想要/预期的时区作为参数。

指定一个正确的时区名称 https://en.wikipedia.org/wiki/List_of_tz_zones_by_name格式为Continent/Region, 例如America/Montreal, Africa/Casablanca, or Pacific/Auckland。切勿使用 2-4 个字母的缩写,例如EST or IST像他们那样not真正的时区,不是标准化的,甚至不是唯一的(!)。

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 https://docs.oracle.com/javase/10/docs/api/java/time/Month.html预定义的枚举对象,一年中的每个月都有一个。提示:使用这些Month整个代码库中的对象而不仅仅是整数,以使您的代码更加自记录,确保有效值,并提供类型安全 https://en.wikipedia.org/wiki/Type_safety。同上Year https://docs.oracle.com/javase/8/docs/api/java/time/Year.html & YearMonth https://docs.oracle.com/javase/8/docs/api/java/time/YearMonth.html.

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 ) ;

About java.time

The java.time http://docs.oracle.com/javase/10/docs/api/java/time/package-summary.html框架内置于 Java 8 及更高版本中。这些课程取代了麻烦的旧课程legacy https://en.wikipedia.org/wiki/Legacy_system日期时间类,例如java.util.Date https://docs.oracle.com/javase/10/docs/api/java/util/Date.html, Calendar https://docs.oracle.com/javase/10/docs/api/java/util/Calendar.html, & SimpleDateFormat http://docs.oracle.com/javase/10/docs/api/java/text/SimpleDateFormat.html.

The 乔达时间 http://www.joda.org/joda-time/项目,现在在维护模式 https://en.wikipedia.org/wiki/Maintenance_mode,建议迁移到java.time http://docs.oracle.com/javase/10/docs/api/java/time/package-summary.html类。

要了解更多信息,请参阅甲骨文教程 http://docs.oracle.com/javase/tutorial/datetime/TOC.html。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310 https://jcp.org/en/jsr/detail?id=310.

您可以交换java.time对象直接与您的数据库。用一个JDBC驱动程序 https://en.wikipedia.org/wiki/JDBC_driver符合JDBC 4.2 http://openjdk.java.net/jeps/170或稍后。不需要字符串,不需要java.sql.*类。

从哪里获取 java.time 类?

  • Java SE 8 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_8, Java SE 9 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_9, Java SE 10 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_10, Java SE 11 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_11, and later - Part of the standard Java API with a bundled implementation.
    • Java 9 添加了一些小功能和修复。
  • Java SE 6 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_6 and Java SE 7 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_7
    • 大部分的java.time功能向后移植到 Java 6 和 7三十后端口 http://www.threeten.org/threetenbp/.
  • Android https://en.wikipedia.org/wiki/Android_(operating_system)
    • 更高版本的 Android 捆绑实现java.time类。
    • 对于早期的 Android (三十ABP项目适应三十后端口 http://www.threeten.org/threetenbp/(上文提到的)。看如何使用 ThreeTenABP... http://stackoverflow.com/q/38922754/642706.

The 三十额外 http://www.threeten.org/threeten-extra/项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/Interval.html, YearWeek http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearWeek.html, YearQuarter http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearQuarter.html, and more http://www.threeten.org/threeten-extra/apidocs/index.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 应用程序上的阿拉伯日期 的相关文章

随机推荐

  • django模板中父子关系的树形结构

    我如何在 django 模板中实现树结构而不使用 django mptt 我有模型 class Person TimeStampedModel name models CharField max length 32 parent model
  • 如何在Android应用程序中点击后隐藏通知

    这是在服务开始时发出通知的代码 NotificationCompat Builder mbuild new NotificationCompat Builder getApplicationContext Intent in new Int
  • 如何注册应用程序以在 iPad 中打开我的应用程序中的 pdf 文件

    我想从 pdf 页面在我的应用程序中打开 pdf 文件 但我没有在我的应用程序中打开 pdf 的任何选项 这是我的 info plist 文件
  • 为什么 git稀疏结帐 会导致致命错误?

    这是我的命令git我正在 Windows 中运行 以稀疏存储库中的签出文件夹 git clone verbose filter blob none no checkout depth 1 sparse https user email pr
  • \x1a 字符的含义是什么

    什么是 x1a字符的含义以及为什么mysql real escape string逃避吗 从文档中 mysql real escape string 调用 MySQL 的库函数 mysql real escape string 该函数在以下
  • 获取两个标题之间的差异

    我有这个方法来计算 2 个 0 360 罗盘方向之间的差异 尽管这可以计算出我的绝对偏差 例如 始终为正输出 有多远 但我无法弄清楚需要做什么才能将符号引入到输出中 理想情况下 如果从初始航向到最终航向的最短距离是顺时针旋转 我希望erro
  • 如何在rpart中应用权重?

    我有 Kaggle 实践竞赛中的房屋数据 我正在使用 rpart 训练一个简单的第一个模型来预测销售价格 该模型无法正确识别销售状况异常或预付款的销售 因此 我想增加这个在模型中显然被忽略的变量的重要性 我假设这是通过使用 权重 参数来完成
  • .ssh/config:Mac OS Sierra 10.12.6 上的“错误配置选项:UseKeychain”

    我正在尝试在 Mac Mac OS Sierra 10 12 6 上设置 ssh 配置 以便将 ssh 密钥的密码存储在钥匙串中 以前我可以这样做 ssh add K ssh id rsa 但最近这个方法似乎不再起作用了 下列的本文 htt
  • USB 传输数据

    我正在尝试通过 USB 发送和接收数据 我的设备 Acer Iconia A500 拥有连接到设备所需的一切 一切都很好并且工作正常 但是当我尝试发送和接收数据时 它的行为并不像预期的 这是我的代码 for this is the main
  • git pull --rebase 上游 master 污染了我的 Github PR diff

    在按照维护人员的要求更改 PR 之前 我会执行以下操作git pull rebase upstream master将我的提交置于代码库中其他新提交之上 然而 这似乎污染我的 PR 的差异 https github com pandas d
  • preg_match() 和用户名

    function isUserID username if preg match a z d 2 20 i username return true else return false 简单的 我有这个 你能解释一下它检查什么吗 我知道它会
  • 无法使用不安全的私钥通过 ssh 连接到 vagrant VM(vagrant 1.7.2)

    我有一个包含 3 个虚拟机的集群 这是 Vagrant 文件 mode ruby vi set ft ruby hosts host0 gt 192 168 33 10 host1 gt 192 168 33 11 host2 gt 192
  • 如何在 C 中创建 3 位变量作为数据类型? [复制]

    这个问题在这里已经有答案了 I can typedef char to CHAR1这是8位 但是如何将 3 位变量设置为数据类型呢 您可能想要执行类似于以下操作的操作 struct unsigned int fieldof3bits 3 n
  • CSS Hack 针对 Firefox 3.5+?

    Firefox 3 5 现在支持 nth 伪类 我用它来定位 Safari 和 Chrome 的 css 现在 Firefox 也会读取这些内容 从而导致轻微的布局问题 有谁知道专门针对 FF 3 5 的方法吗 BODY nth of ty
  • 如何使用 WordPress 点击播放 GIF(如 9GaG.com)?

    我需要在wordpress网站中实现这个 gif播放器 因为gif页面高达6mb 所以性能真的很糟糕 我读过这个Onclick 使用 jQuery 播放 GIF 图像并从头开始 https stackoverflow com questio
  • 如何删除 angular-ui-router URL 中的“#”符号

    我正在使用 angular ui router 库 但我遇到了 URL 问题 我有以下代码 app js app config function stateProvider urlRouterProvider stateProvider s
  • 根据 getDay 和 getHours + getMinutes 显示 div

    我正在为一家广播电台建立一个网站 并想显示当前正在播出的主持人 我构建了一个网络应用程序 其中包含演示者的数据 姓名 照片 个人简介以及每个工作日的开始 结束时间 div div class slot div div div 12 00 1
  • 以编程方式检查 DataBound CheckListBox

    我有一个 DataBound CheckedListBox 我需要检查上面的一些项目 我尝试使用以下代码 if string IsNullOrEmpty search Languages string langs search Langua
  • 如何避免 Raphael js 路径重叠

    我有一个基于 Raphael js 的流程图 它是一样的http raphaeljs com graffle html http raphaeljs com graffle html 然而 由于我有许多矩形拉斐尔盒子 并且我的线条路径是直线
  • Android 应用程序上的阿拉伯日期

    我正在开发 Android 应用程序 以及在应用程序上添加阿拉伯语的下一个版本 但我有一个问题 这个问题是 Android操作系统转换日期动态地为阿拉伯格式 我在 URL 参数中使用它 服务器无法读取它 如何将任何阿拉伯日期转换为英文日期