我正在添加这个问题,因为我是Java和Android的新手,我搜索了几个小时试图解决这个问题.答案来自相关答案的组合,所以我想我会记录我为其他可能正在努力的人学到的东西.见答案.
对于一些背景知识,我的经验主要是PHP的Web开发和一点Ruby.我唯一的操作系统是Linux(Ubuntu Studio),我(不情愿地)在Android Studio 2.1.2中开发我的第一个Android应用程序.我的Java设置如下:
>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Run Code Online (Sandbox Code Playgroud) datetime android android-gradle-plugin threetenbp threetenabp
我有一个名为date的LocalDate变量,当我打印它显示1988-05-05我需要转换它打印为05.May 1988.How这样做?
我有这个简单的代码:
DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z");
LocalDateTime.now().format(FORMATTER)
Run Code Online (Sandbox Code Playgroud)
然后我会得到以下异常:
java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: OffsetSeconds
at java.time.LocalDate.get0(LocalDate.java:680)
at java.time.LocalDate.getLong(LocalDate.java:659)
at java.time.LocalDateTime.getLong(LocalDateTime.java:720)
at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
at java.time.format.DateTimeFormatterBuilder$OffsetIdPrinterParser.format(DateTimeFormatterBuilder.java:3315)
at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2182)
at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1745)
at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1719)
at java.time.LocalDateTime.format(LocalDateTime.java:1746)
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
我经常遇到关于Java Date
和其他与日期时间相关的类的负面反馈.作为一名.NET开发人员,我不能完全(没有使用它们)了解它们实际上有什么问题.
任何人都可以对此有所了解吗?
正如大多数人现在痛苦地意识到的那样,用于处理日历日期的Java API(特别是类java.util.Date
和java.util.Calendar
)是一个糟糕的混乱.
脱离我的头顶:
现在我的问题是:
这些类是如何进入Java SDK的?大多数这些问题看起来相当明显(特别是Date是可变的)并且应该很容易避免.那怎么回事?时间压力?或者回想起来的问题是否明显?
我意识到这不是一个严格的编程问题,但我发现理解API设计如何出错是很有趣的.毕竟,错误总是一个很好的学习机会(我很好奇).
我有一个日期格式的字符串,如
Jun 13 2003 23:11:52.454 UTC
Run Code Online (Sandbox Code Playgroud)
包含millisec ...我想在epoch中转换.Java中是否有可用于执行此转换的实用程序?
我需要获取Java中的当前时间戳,格式为MM/DD/YYYY h:mm:ss AM/PM
,
例如: 06/01/2000 10:01:50 AM
我需要它也是Threadsafe.
我可以利用这样的东西吗?
java.util.Date date = new java.util.Date();
System.out.println(new Timestamp(date.getTime()));
Run Code Online (Sandbox Code Playgroud)
或者链接在这里讨论的例子.
我有以下场景:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
System.out.println(dateFormat.parse("31/05/2011"));
Run Code Online (Sandbox Code Playgroud)
给出一个输出
Tue May 31 00:00:00 SGT 2011
Run Code Online (Sandbox Code Playgroud)
但我想要输出
31/05/2011
Run Code Online (Sandbox Code Playgroud)
我需要在这里使用解析,因为日期需要按日期排序而不是字符串.
有任何想法吗 ??
我想要以毫秒为单位的当前时间然后以12小时格式存储它,但是使用这段代码我得到24小时格式时间.
long timeInMillis = System.currentTimeMillis();
Calendar cal1 = Calendar.getInstance();
cal1.setTimeInMillis(timeInMillis);
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy HH:mm:ss a");
dateforrow = dateFormat.format(cal1.getTime());
Run Code Online (Sandbox Code Playgroud)
任何人都可以提出修改以获得理想的结果?
我想将a转换ZonedDateTime
为a String
格式("dd/MM/yyyy - hh:mm")
.我知道这在Joda-Time其他类型中是可能的,只是使用它们toString("dd/MM/yyyy - hh:mm")
....但这不起作用ZonedDateTime.toString()
.
ZonedDateTime
为String
?编辑:
我试图在另一个时区打印时间,结果似乎总是一样:
ZonedDateTime date = ZonedDateTime.now();
ZoneId la = ZoneId.of("America/Los_Angeles");
ZonedDateTime date2 = date.of(date.toLocalDateTime(), la);
// 24/02/2017 - 04:53
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm").format(date));
// same result as the previous one
// 24/02/2017 - 04:53
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm").format(date2));
Run Code Online (Sandbox Code Playgroud)
而且我和洛杉矶不在同一时区.
编辑2:
找到了如何更改时区:
// Change this:
ZonedDateTime date2 = date.of(date.toLocalDateTime(), la); // incorrect!
// To this:
ZonedDateTime date2 = date.withZoneSameInstant(la);
Run Code Online (Sandbox Code Playgroud) java ×9
datetime ×4
date ×3
android ×2
java-time ×2
api-design ×1
epoch ×1
format ×1
java-8 ×1
string ×1
threetenabp ×1
threetenbp ×1
timestamp ×1