yy = 15(年),D = 150(一年中的一天),HH = 10(小时)
Date myDateWrong = new SimpleDateFormat("yyDHH").parse("1515010");
Date myDateTrue = new SimpleDateFormat("yyD").parse("15150");
myDateTrue是对的:2015年5月30日。 myDateWrong必须是30/05/2015 10:00:00但似乎是28/07/2015 18:00:00。这是问题吗?
答案 0 :(得分:2)
我要猜测,错误日期占了一个月的一位数(如你所指定的那样),然后取了小时的其余数字(就像从julian日期的其余数字一样)原始格式)。所以你有2015年,1月和5010小时。我没有详细计算过,但是5010小时会给你大约7个月,这可以解释为7月结束。 18:00时间只反映了剩余的时间。
所以你需要使用DDD作为Julian日的指定者(不是另一条评论中建议的ddd),然后按预期出现。
答案 1 :(得分:0)
您的格式不正确。你应该使用:
Date myDateWrong = new SimpleDateFormat("yydddhh").parse("1515010");
答案 2 :(得分:0)
您需要15150
为30/05/2015
...但实际上是12:00:00尝试this:
String j = "15150";
Date date = new SimpleDateFormat("yyD").parse(j);
String g = new SimpleDateFormat("dd.MM.yyyy hh:mm").format(date);
System.out.println(g);
答案 3 :(得分:0)
LocalDateTime ldt = LocalDateTime.parse ( "1515010" , DateTimeFormatter.ofPattern ( "yyDHH" ) );
LocalDate ld = LocalDate.parse ( "15150" , DateTimeFormatter.ofPattern ( "yyD" ) );
使用术语“Julian”作为序数的年份数在技术上并不正确,但仍然是常用的。我建议你避免与实际Julian date的模糊和混淆,并坚持使用准确的术语ordinal date或“每年的一天”。
Java 8及更高版本中内置的java.time框架可以在这里提供帮助。下面的示例代码证明您的方案(有和没有时间)在java.time中正常工作。
这些java.time类取代了旧的麻烦的日期时间类,例如java.util.Date
。见Oracle Tutorial。许多功能已经被后端移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。
使用DateTimeFormatter
类定义格式化程序模式。格式代码与SimpleDateFormat
的格式代码类似,但不完全相同,因此请研究类文档。在这个类中,如果省略世纪,则假设21世纪(20xx
)。
String input = "1515010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "yyDHH" );
LocalDateTime ldt = LocalDateTime.parse ( input , formatter );
LocalDateTime
缺少任何时区或偏离UTC的信息。所以不代表时间轴上的一个时刻。如果我们可以假设此输入旨在位于UTC时区的上下文中,则转换为OffsetDateTime
。
OffsetDateTime odt = ldt.atOffset ( ZoneOffset.UTC );
转储到控制台。
System.out.println ( "input: " + input + " | ldt: " + ldt + " | odt: " + odt );
输入:1515010 | ldt:2015-05-30T10:00 | odt:2015-05-30T10:00Z
对于没有时间且没有时区的仅限日期的值,我们实例化LocalDate
。
String input = "15150";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "yyD" );
LocalDate ld = LocalDate.parse ( input , formatter );
转储到控制台。
System.out.println ( "input: " + input + " | ld: " + ld );
输入:15150 | ld:2015-05-30