- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
前提
这个问题可能被合理地认为过于宽泛或观点驱动,但我觉得无论如何我都必须冒险。
问题
在 Java 的 Formatter 中说明的日期/时间转换格式之间存在许多难以理解的不一致之处。 VS SimpleDateFormat蜜蜂。
例如:
M
代表 Formatter
中的分钟但是 SimpleDateFormat
中的月份反之亦然S
和 L
Formatter
中分别代表秒和毫秒,但是s
和 S
SimpleDateFormat
中分别代表秒和毫秒A
和 a
分别代表Formatter
中星期几的长/短名称但 SimpleDateFormat
中的输出相同由 <= 2
表示对比> 2
连续出现 E
, 而 a
代表 AM/PM 标记,在 SimpleDateFormat
中问题(s)
Formatter
推断的 API:
The types are similar to but not completely identical to those defined by GNU date and POSIX
strftime(3c)
.
SimpleDateFormat
似乎甚至懒得提及其公约的基本原理最佳答案
简单日期格式
正如@Tunaki 所说,SimpleDateFormat
使用 Date Field Symbol Table 定义的模式字符(由 CLDR 或 Unicode Common Locale Data Repository 标准化)。
该项目被许多公司广泛使用,例如谷歌、IBM、微软、苹果等,以实现广泛的语言环境数据标准存储库,以及软件国际化和本地化。这就是为什么一些日期/时间模式与来自不同编程语言的其他模式非常相似的原因。
另外,除了裁决 way we use date, time and time zone , 指定排序规则、键盘映射、数字、货币等标准非常重要。此外,它定义了当我们尝试解析日文日期时会发生什么,例如
为了理解这一点,我们必须说明 what means a "parsing" process :
- A mapping between a point in time (UDate) and a set of calendar fields, which in turn depends on:
- The rules of a particular calendar system (e.g. Gregorian, Buddhist, Chinese Lunar)
- The time zone
- A mapping between a set of calendar fields and a formatted textual representation, which depends on the fields selected for display, their display style, and the conventions of a particular locale.
因此,有必要知道 "MMMMdjmm"
的框架可能会针对不同的语言环境产生以下格式模式:
Locale | format pattern
------ | ---------------------
en_US | "MMMM d 'at' h:mm a"
es_ES | "d 'de' MMMM, H:mm"
ja_JP | "M月d日 H:mm"
格式化程序
Formatter
“采用”不同格式化模式的原因是因为这个类应该是 printf 风格格式字符串的解释器,它非常接近 GNU date。和 POSIX strftime(3c)
现实(如 official docs states )。
来自 GNU 文档:
The output of the
date
command is not always acceptable as a date string, not only because of the language problem, but also because there is no standard meaning for time zone items like 'IST'.When using date to generate a date string intended to be parsed later, specify a date format that is independent of language and that does not use time zone items other than 'UTC' and 'Z'.
让我们来看一个使用 GNU 的简单日期/时间示例:
TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ'
// Output: 2004-03-01 00:21:42Z
注意 printf 风格以及 Formatter
类相同转换字符的使用。
但是,文档还说它们只是相似,而不是相同。这是因为 Java 为特定字段选择了一些灵 active ,例如 'z'
情况:
RFC 822 style numeric time zone offset from GMT, e.g. -0800. This value will be adjusted as necessary for Daylight Saving Time.
关于java - Formatter VS DateFormat 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40828087/
我已经从代码隐藏动态生成文本框,一个类“DateTextBox”被设置为所有动态生成的文本框控件。日期选择器控件设置为类,但每个文本控件需要不同的日期格式。如何为每个文本框的 DatePicker 设
我正在开发一个不是我构建的网站,并且有一个页面不断在控制台中给出错误“Uncaught ReferenceError: dateFormat is not Define” 下面是包含错误的 JS(第
我认为这可能是 Android studio 的一个错误,不幸的是它阻止了我继续前进。 我正在使用(并选择!)android.text.format.DateFormat 作为我的 DateForma
我在android上阅读了一些关于格式化日期的帖子,像这样: How do you format date and time in Android? 人们建议使用 android.text.forma
其他类如 SimpleDateFormat 也是如此。Java 有一个 java.text.SimpleDateFormatAndroid 有 android.icu.text.SimpleDateF
我对 SimpleDateFormat 有疑问。 SimpleDateFormat dtfmt=new SimpleDateFormat("dd MMM yyyy hh:mm a", Locale.g
我尝试使用 SimpleDateFormat 解析日期,但遇到了奇怪的行为。 此示例在我的计算机上打印“Sun Jan 01 19:00:32 CET 2012”: import java.text.
上图是日期选择器,我点击确定后,结果如下图所示。 代码如下 public class DatePickerFragment extends DialogFragment implements
我正在尝试解析为“Mar 28,2017 13:00”类型的 Java 日期字符串。 我写了以下代码 DateFormat df = new SimpleDateFormat("MMM
如何将日期格式设置为以下 View 2018 年 10 月 21 日(月份大写)?我可以通过 "%1$TB %1$te, %1$tY" 模式获取它,但我需要通过 SimpleDateFormat 来完
例如: 用户可以输入 01/23/1983 或 1/23/1983 我如何使用 DateFormat 编写两种不同的格式,例如 (MM/DD/YYYY) 和 (M/DD/YYYY) 并将它们与实际日期
我可能忽略了一些东西,但是从字符串解析到日期对我来说无法正常工作。我有字符串:“20110705_060229”,格式为:“YYYYddMM_HHmmss” 这段代码: Date triggermom
我正在尝试使用 DateFormat 类和 格式模式来解析字符串 "20/08/18 13:21:00:428" “dd/MM/yy”“HH:mm:ss:SSS”。时区设置为 BST。 上述返回的日期
这就是我正在做的事情: SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Local
运行以下代码时出现意外输出, DateFormat df = new SimpleDateFormat("YYYY-MM-dd"); Date date = df.parse("2012-06-23"
我正在尝试将时差显示为一个字符串,该字符串遵循 00:00:00(小时:分钟:秒)的形式,并用零填充。我有以下代码: long timeDiff = System.currentTimeMillis(
我在将 json 对象中收到的日期转换为其所需的格式时遇到问题。我从后端获得的日期是 4 月 13 日,星期三,下午 04:06:00。这就是我所做的。 String refreshDateStrin
String selectedDate = "2012-" + createdMonth + "-" + createdDay; SimpleDateFormat dateFormat = new S
我想将 String 转换为 Date。我的代码: String maturityDate = "20150722"; SimpleDateFormat formatter = new
我通过 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(DateinString) 将日期字符串转换为 Date。 这里不是转换为 UTC,而是转换为
我是一名优秀的程序员,十分优秀!