我需要将时间间隔表示为这样的本地化字符串:10 hours 25 minutes 1 second取决于Locale。用英语手工实现非常容易:
String hourStr = hours == 1 ? "hour" : "hours"等等。
但是我需要根据不同语言的规则提供一些“开箱即用”的Java(也许是Java8)机制。Java是否具有它,或者我需要针对我自己在应用程序中使用的每个语言环境实现它?
我试图了解如何DateTimeFormatter为我的应用程序构建自定义。我基本上需要处理这样写的时间"HHMMSS.FFFFFF"。
我能够使用以下方法获得 99% 的结果:
import static java.time.temporal.ChronoField.HOUR_OF_DAY;
import static java.time.temporal.ChronoField.MICRO_OF_SECOND;
import static java.time.temporal.ChronoField.MINUTE_OF_HOUR;
import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
public static final DateTimeFormatter MY_TIME;
static {
MY_TIME = new DateTimeFormatterBuilder()
.appendValue(HOUR_OF_DAY, 2)
.appendValue(MINUTE_OF_HOUR, 2)
.optionalStart()
.appendValue(SECOND_OF_MINUTE, 2)
.optionalStart()
.appendFraction(MICRO_OF_SECOND, 0, 6, true)
.toFormatter().withResolverStyle(ResolverStyle.STRICT);
}
Run Code Online (Sandbox Code Playgroud)
我可以很好地处理输入:
String text = "101530";
LocalTime lt = LocalTime.parse(text, MY_TIME);
Run Code Online (Sandbox Code Playgroud)
甚至
String text = "070907.0705";
LocalTime lt = LocalTime.parse(text, MY_TIME);
Run Code Online (Sandbox Code Playgroud)
和
String text = "0000";
LocalTime lt = LocalTime.parse(text, MY_TIME);
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,我无法理解处理闰秒的 API,因此以下内容对我来说总是失败:
String text = …Run Code Online (Sandbox Code Playgroud) 我想要几毫秒到下一个小时.例如
现在时间 - > 10:01:23 2018年10月2日,想要剩余毫秒到2018年10月2日11:00:00.
现在时间是动态的,可以是2018年10月2日23:56:56,下一个小时是2018年10月3日00:00:00.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(startDate.getMillis());
calendar.add(Calendar.HOUR, 1);
Run Code Online (Sandbox Code Playgroud)
我正在尝试这样的事情,但是它在startDate上增加了1个小时.但我想要下一个小时.
欢迎任何帮助.
当我正在编写格式和解析引擎时,我想找出 - 给定一个juLocale,如果一般文本方向是从右到左(字母字符).我所看到的是:
1.)Character#getDirectionality(char)这需要了解要解析的具体char,由于可能的填充字符,这并不总是很容易.
2.)java.awt.ComponentOrientation #getOrientation(Locale)这个方法对我来说有两个问题.首先,我不想依赖于awt或其他gui库(预期Java可能会在以后的模块化).第二个也是更重要的:在OpenJDK和Android中实现这个方法只是使用一种非常简单的方法,即:如果语言是(ar,fa,iw,ur)之一,那么方法就是RIGHT_TO_LEFT.但是看看维基百科-ISO-639,似乎有更多的语言具有从右到左的方向,例如ISO-639代码'他'(希伯来语).
所以现在我的问题是,你知道更好的方法吗?目前我倾向于使用维基百科列表,即使用更好的语言列表来优化java.awt.ComponentOrientation方法.
我正在使用Joda Time 2.3将String转换为java.lang.Date.
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是一些测试代码:
System.out.println(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("1927-12-11 11:22:38"));
System.out.println(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("1927-12-11 11:22:38").toDate());
System.out.println(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("1937-12-11 11:22:38"));
System.out.println(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("1937-12-11 11:22:38").toDate());
Run Code Online (Sandbox Code Playgroud)
它在JDK 5和JDK 7下运行良好.但是当使用JDK 6时,结果是:
1927-12-11T11:22:38.000+08:05:57
Sun Dec 11 11:22:33 CST 1927 // lose 5 second
1937-12-11T11:22:38.000+08:00
Sat Dec 11 11:22:38 CST 1937
Run Code Online (Sandbox Code Playgroud)
你看到第一次转换为java.lang.Date失去了5秒,但第二次转换是正确的.唯一的区别是年份数,第一个是1927年,第二个是1937年.1927年以下的所有年份数都将导致错误.
这对joda来说一定是错的.有人可以告诉我如何避免这个错误,或者我必须使用SimpleDateFormatter.
谢谢!
是否有任何格式模式可以与 SimpleDateFormat 一起用于季度和半年?
2007-01-23 expected output `Q1 2007`
2007-01-23 expected output `H1 2007`
Run Code Online (Sandbox Code Playgroud) 我在我的电脑上安装了kvm:
sudo apt-get install qemu-kvm
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行命令时:
qemu-kvm -m 384 -cdrom guestos.iso -hda image.img -boot d
Run Code Online (Sandbox Code Playgroud)
要从cdrom引导ISO映像,它会给出错误,指出"找不到qemu-kvm命令".我是否错过了安装任何所需的包裹?如果没有,缺少什么?
我们正在构建一个带有第三方SOAP Web服务的Java客户端,即我无法访问或控制服务器端代码.我们刚刚提供了该服务的WSDL描述文件.我们正在使用Axis 1(版本1.4).
我们遇到了与日期与日期时间序列化和反序列化相关的以下问题.所述wsdl定义了DateTime和DateRange两种类型
<xs:element minOccurs="0" name="DateTime" type="xs:dateTime"/>
<xs:element minOccurs="0" name="DateRange">
<xs:complexType>
<xs:sequence>
<xs:element name="Start" type="xs:date"/>
<xs:element name="End" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
其中xs前缀表示XML Schema,存在以下内容
xmlns:xs="http://www.w3.org/2001/XMLSchema"
Run Code Online (Sandbox Code Playgroud)
轴wsdl2java生成Java对象,其中datetime字段的类型为Calendar,start,end字段的类型为java.util.Date
当序列化发生时,开始和结束字段被序列化为yyyy-mm-dd格式,例如2014-02-01但是当实际调用到服务器端时,我们收到以下响应
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">JiBX unmarshalling exception; nested exception is org.jibx.runtime.JiBXException: Missing 'T' separator in dateTime</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
我们使用SOAP UI直接构建请求xml有效负载,并观察如果我们只在开始和结束字段中传递日期部分,我们得到完全相同的响应,而如果我们传递这两个字段的时间部分,如dateTime字段,它工作,给出否故障信息.
这与我从xs:date和xs:dateTime的 XMLSchema文档中可以发现的内容一起 ,特别是词法和规范表示部分,似乎意味着
基于轴的开始和结束字段序列化为yyyy-mm-dd并忽略时间部分是正确的.生成的客户端代码符合提供给我们的WSDL.
服务器端代码不符合提供给我们的WSDL,它需要dateTime字段而不是date字段.
由于日期和日期时间字段需要通过模式定义以不同格式进行序列化.在尝试反序列化消息时,服务器端失败的结果
为了验证我们的假设1.我们使用Python的ZSI库来生成python存根并从中生成xml.
即使是序列化也以yyyy-mm-dd格式开始和结束,最后还有一个"Z".这再次无法在服务器端进行反序列化,即使此序列化格式符合XML Schema定义的xs:date
<ns1:Start>2014-02-05Z</ns1:Start>
Run Code Online (Sandbox Code Playgroud)
根据观察到的行为,文档和Python ZSI实验是否正确,有人可以确认我们是否形成了假设.或者如果我们遗漏了一些细节
我在使用 Joda 函数时遇到问题daysBetween。它不断地告诉我
The method daysBetween(ReadableInstant, ReadableInstant) in the type Days is not applicable for the arguments (LocalDate, LocalDate)
Run Code Online (Sandbox Code Playgroud)
当我尝试插入两个localdate项目时。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(reviewDate, formatter);
Date dateNow = new Date();
LocalDate date1 = LocalDate.parse(dateNow.toString(),formatter);
int days = Days.daysBetween(date,date1).getDays();
Run Code Online (Sandbox Code Playgroud)
我试图获取reviewDate与当前日期之间的天数date1我做错了什么?
在闰秒之前和期间,似乎呼叫new Date()将返回23:59:59两次(一次在闰秒之前,一次在闰秒期间),而不是23:59:59和23:59:60.
有没有办法(没有在应用程序中实现NTP客户端,或检查时钟倒退或重复自己)以确定给定秒是否是闰秒,以便正确呈现23:59 :60给用户?
就此而言,主机操作系统是否有任何钩子来确定它是在前或后闰秒?