- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想将“2018-04-13T20:00:00.0400”之类的日期时间字符串转换为“2018 年 4 月 13 日”。我用过代码
val sdf = SimpleDateFormat("yyyy/mm/dd", Locale.getDefault())
val startDate = sdf.parse(data.start_time)
但是使用这段代码,我的应用程序崩溃了。关于此的任何帮助
日志显示这个
2018-10-11 16:44:56.948 20482-21021/? E/NowController: Failed to access data from EntryProvider. ExecutionException.
java.util.concurrent.ExecutionException: com.google.android.apps.gsa.sidekick.main.h.n: Could not complete scheduled request to refresh entries. ClientErrorCode: 3
at com.google.common.util.concurrent.d.eA(SourceFile:85)
at com.google.common.util.concurrent.d.get(SourceFile:23)
at com.google.common.util.concurrent.l.get(SourceFile:2)
at com.google.android.apps.gsa.staticplugins.nowstream.b.a.be.cbB(SourceFile:49)
at com.google.android.apps.gsa.staticplugins.nowstream.b.a.be.cbA(SourceFile:181)
at com.google.android.apps.gsa.staticplugins.nowstream.b.a.bh.run(Unknown Source:2)
at com.google.android.apps.gsa.shared.util.concurrent.at.run(SourceFile:4)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at com.google.android.apps.gsa.shared.util.concurrent.b.g.run(Unknown Source:4)
at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
at com.google.android.apps.gsa.shared.util.concurrent.b.i.run(SourceFile:6)
Caused by: com.google.android.apps.gsa.sidekick.main.h.n: Could not complete scheduled request to refresh entries. ClientErrorCode: 3
at com.google.android.apps.gsa.staticplugins.nowstream.b.a.ar.az(Unknown Source:4)
at com.google.common.util.concurrent.q.ap(SourceFile:7)
at com.google.common.util.concurrent.p.run(SourceFile:32)
at com.google.common.util.concurrent.bt.execute(SourceFile:3)
at com.google.common.util.concurrent.d.b(SourceFile:275)
at com.google.common.util.concurrent.d.addListener(SourceFile:135)
at com.google.common.util.concurrent.p.b(SourceFile:3)
at com.google.android.apps.gsa.shared.util.concurrent.h.a(SourceFile:16)
at com.google.android.apps.gsa.shared.util.concurrent.h.a(SourceFile:13)
at com.google.android.apps.gsa.staticplugins.nowstream.b.a.be.cbB(SourceFile:47)
最佳答案
使用现代 java.time 类,绝不使用糟糕的遗留类。
这是Java语法(我还没有学过Kotlin)。
LocalDateTime // Represent a date with time-of-day but lacking offset-from-UTC or time zone. As such, this does *not* represent a moment, is *not* a point on the timeline.
.parse( "2018-04-13T20:00:00.0400" ) // Parse an input string in standard ISO 8601 format. Returns a `LocalDateTime` object.
.toLocalDate() // Extract the date-only portion without the time-of-day. Still no time zone or offset-from-UTC. Returns a `LocalDate` object.
.format( // Generate text representing the value of that `LocalDate` object.
DateTimeFormatter // Define a pattern to use in generating text.
.ofLocalizedDate( FormatStyle.LONG ) // Automatically localize, specifying how long/abbreviated…
.withLocale( Locale.US ) // … and what human language and cultural norms to use in localizing.
) // Return a `String`.
April 13, 2018
对于早期的 Android,请参阅下方底部的项目符号。
convert the DateTime string like "2018-04-13T20:00:00.0400" into "April 13, 2018".
您正在使用多年前被 java.time 类取代的可怕的旧日期时间类。
首先,解析您的输入字符串。但是最后那个 .0400
是什么?也许是零点几秒?但传统上,毫秒、微秒或纳秒以 3 位数字为一组显示。所以你这里的四位数是奇数。也许是与 UTC 的偏移量?四位数是正确的,小时和分钟前导零。但是没有plus 或minus 符号来表示在UTC 之前或之后。所以我会选择小数秒。
您的输入缺少任何与 UTC 或时区的偏移指示符。因此解析为 LocalDateTime
。您的字符串采用标准 ISO 8601 格式。 java.time 类默认使用标准格式。
String input = "2018-04-13T20:00:00.0400";
LocalDateTime ldt = LocalDateTime.parse( input );
ldt.toString(): 2018-04-13T20:00:00.040
提取日期部分。
LocalDate ld = ldt.toLocalDate() :
ld.toString(): 2018-04-13
生成表示该日期值的文本。让 java.time 自动本地化。要本地化,请指定:
FormatStyle
确定字符串的长度或缩写。Locale
确定:
代码:
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.LONG ).withLocale( Locale.US );
String output = ld.format( f );
April 13, 2018
注意:LocalDateTime
对象不是一个时刻,不是时间轴上的一个点。缺少与 UTC 或时区的任何偏移量意味着它代表了一系列潜在时刻,大约在 26-27 小时的范围内(当前全局时区范围)。如果输入字符串隐含地表示某个区域的挂钟时间中的时刻,则应在提取 之前应用
。这已经在 Stack Overflow 上多次展示过。ZoneId
获取 ZonedDateTime
>本地日期
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 类?
ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
, 和 more .
关于android - 在Kotlin中将日期时间字符串(2018-04-13T20 :00:00. 0400)转换为日期字符串(April 13, 2018),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52759033/
我想显示一些日期 Yesterday, 13 April Today, 14 April Tomorrow, 15 April Tuesday, 4 April Wednesday 5 April 我
String str2="April 30, 2013"; simpleDateFormat s= new simpleDateFormat(); SimpleDateFormat
我想在日期字符串的"6th 7th.. etc."中获取day。 我试过了SimpleDateFormater &也试试DateFormatSymbols .我没有收到 String Required
我的表中有一个字段,其中包含表单中的字符串 "Thursday 19th April 2012" 我如何在 MYSQL 或 PHP 中更改此设置,以便我可以执行操作并找到 2 个日期之间的差异?。 最
当我运行以下代码时,我得到的是 4 月 30 日而不是 27 日。 strtotime("Last Friday April 2012"); 我试着把它改成星期四运行,然后我在 29 号回来了。 以下
Heyo,我正在尝试使用Kibana创建索引模式,为此,我需要在Elasticsearch中解析日期“April 10th 2018,07:32:45.987”。我的问题是10以后的“th”。Elas
这个问题在这里已经有了答案: Converting a String to DateTime (17 个答案) 关闭 9 年前。 我有字符串格式的日期: APRIL, 03/2013 如何在C#中转
我有一些具有描述性日期的数据(例如,感恩节前的星期一、二月的最后一天、四月的第四个星期六)作为描述开始和结束时间的一部分。有些日期是明确的(例如 10 月 31 日)。我想存储描述性和明确的值,这样我
我在使用 R 中的数据格式方面没有经验,而且我正在努力理解 4 月 1 日的不同行为......这是愚人节吗? :) 它们具有相同的格式,但似乎无法使用 as.POSIXct 解析第一天(当其他日期显
SELECT ORDER_ITEM.OrderID, ORDERS.OrderDate FROM ORDER_ITEM LEFT JOIN ORDERS ON ORDER_ITEM.OrderID =
我正在使用 ASP.NET 开发网站,并使用 Oauth 功能将用户注册到我的网站。我从 Visual Studio 2013 的 nuget 包下载了 DontNetOpenOauth。 到目前为止
April ant May 在 php 中返回相同的日期: var_dump(new DateTime('四月的第一天')); - '2016-05-01 00:00:00' var_dump(new
我很确定这是微不足道的,但就我的生活而言,我似乎找不到引用。 感谢任何帮助。 最佳答案 使用Date#parse ruby-1.9.2-p136 :008 > d = Date.parse("5 Ap
我试图从 DatePicker 中获取两个日期之间的天数差。除了 ONE single date : March 31 外,这工作正常。 当其中一个日期是 3 月 31 日时,两个 DateTimes
我想将“2018-04-13T20:00:00.0400”之类的日期时间字符串转换为“2018 年 4 月 13 日”。我用过代码 val sdf = SimpleDateFormat("yyyy/m
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 3 年前。 Improve
我正在尝试构建我的项目并遇到这个奇怪的错误(因为所有这些在以前的 AS 版本中都运行良好) Error:Error converting bytecode to dex: Cause: Dex can
我正在使用 Ruby on Rails v3.2.2,我想将数据显示为 .也就是说,我有一个 datetime数据库表列,我想更改其包含的值,例如,从 2012-04-27 00:00:00至
我是一名优秀的程序员,十分优秀!