Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法分析,FomatStyle_Java_Javafx_Java Time - Fatal编程技术网

Java 无法分析,FomatStyle

Java 无法分析,FomatStyle,java,javafx,java-time,Java,Javafx,Java Time,在我的应用程序中,当我选择“20:45”计时选择器时,它的格式为“8:45 pm” 我可以用以下代码重现该问题: String input = "8:45pm"; LocalTimeStringConverter converter = new LocalTimeStringConverter(FormatStyle.SHORT, Locale.ENGLISH); System.out.println(converter.fromString(input)); 这会引发异常: java.tim

在我的应用程序中,当我选择“20:45”计时选择器时,它的格式为“8:45 pm” 我可以用以下代码重现该问题:

String input = "8:45pm";
LocalTimeStringConverter converter = new LocalTimeStringConverter(FormatStyle.SHORT, Locale.ENGLISH);
System.out.println(converter.fromString(input));
这会引发异常:

java.time.format.DateTimeParseException: Text '8:45pm' could not be parsed at index 4
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1777)
at javafx.util.converter.LocalDateTimeStringConverter$LdtConverter.fromString(LocalDateTimeStringConverter.java:208)
at javafx.util.converter.LocalTimeStringConverter.fromString(LocalTimeStringConverter.java:119)
at com.jfoenix.skins.JFXTimePickerContent.updateValue(JFXTimePickerContent.java:427)
at com.jfoenix.skins.JFXTimePickerContentTest.updateValue(JFXTimePickerContentTest.java:11)
我如何解决这个问题

更新1 解决方案 Java从windows首选项获取JVM的默认区域设置

我的JVM默认语言环境是韩语,即使我将LocalTimeStringConverter设置为英语,也会出现异常

我们可以通过几种方式设置jvm的区域设置

或者更改代码。以下代码是:

String input = "8:45pm";
input = input.toUpperCase(); // DateTimeFormatter expects "PM" (uppercase)
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("h:mma", Locale.ENGLISH);
LocalTimeStringConverter converter = new LocalTimeStringConverter(dtf, dtf);
System.out.println(converter.fromString(input));
就像雨果说的


感谢您的回答。

此格式接受稍微不同的样式,因此您的输入必须转换为“8:45 PM”

但是,java.time.format.FormatStyle文档说:

/**
 * Short text style, typically numeric.
 * For example, the format might be '12.13.52' or '3:30pm'.
 */
SHORT;

我想,这需要修正。

英语语言环境时间值的预定义格式是'HH:MM{A/p}M'。因此,首先,在时间和'pm'字符串之间必须有一个空格,第二个'pm'必须是大写。另请参见本java教程页面:


干杯

由于您的输入字符串是
8:45pm
FormatStyle。SHORT
pm
之前需要一个空格,因此我使用了
DateTimeFormatter

String input = "8:45pm";
input = input.toUpperCase(); // DateTimeFormatter expects "PM" (uppercase)
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("h:mma", Locale.ENGLISH);
LocalTimeStringConverter converter = new LocalTimeStringConverter(dtf, dtf);
System.out.println(converter.fromString(input));
输出为:

20:45


我试着使用你的代码,但它仍然抛出相同的异常对我来说很好,你确定你的字符串被替换为“8:45 PM”吗?是的。我曾在其他计算机上尝试过这个代码。但仍然不起作用。我的jdk版本是“8u110”,我尝试使用你的代码,但它仍然抛出相同的异常在确保“fromString(input)”获得“8:45 PM”作为输入后,你可以再次发布异常消息吗?这让我的应用程序很有魅力。但是,我想知道使用FormatStyle.SHORT的问题。在我的测试中,我注意到
FormatStyle.SHORT
要求在分钟和“PM”之间有一个空格(因此只有当输入是
8:45 PM
(在“5”之后有一个空格)我已经测试过你说的。输入是“8:45 PM”但是它仍然会抛出相同的异常。我更新了这个异常(Update1)我在这里做了一些测试。基本上,使用
FormatStyle.SHORT
它只在输入为
8:45 PM
(其他任何东西都会抛出异常)。使用
DateTimeFormatter
(上面我回答中的代码),它仅在输入为
8:45pm
8:45pm
时有效(因为我使用的是
toUpperCase
方法,所以这两种情况都有效)。
/**
 * Short text style, typically numeric.
 * For example, the format might be '12.13.52' or '3:30pm'.
 */
SHORT;
String input = "8:45 PM";
String input = "8:45pm";
input = input.toUpperCase(); // DateTimeFormatter expects "PM" (uppercase)
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("h:mma", Locale.ENGLISH);
LocalTimeStringConverter converter = new LocalTimeStringConverter(dtf, dtf);
System.out.println(converter.fromString(input));