我很惊讶java.sql.Date有一种方法toLocalDate().
java.util.Date或者java.time.Instant没有类似的方法.看来,在java.time中,ZoneId必须始终提供给获得"LocalFoo"或"OffsetBar".
来自javadoc java.sql.Date#toLocalDate():
将此Date对象转换为LocalDate.转换创建一个LocalDate,表示与本地时区中的此Date相同的日期值
哪个时区是"当地时区"?它是否依赖于数据库或JVM设置?
我需要DateTimeFormatter为以下有效日期创建一个.
String date1 = "2017-06-20T17:25:28";
String date2 = "2017-06-20T17:25:28.477777";
String date3 = "2017-06-20T17:25:28.477777Z";
String date4 = "2017-06-20T17:25:28.477777UTC";
String date5 = "2017-06-20T17:25:28.477777-05";
String date6 = "2017-06-20T17:25:28.477777+05";
String date7 = "2017-06-20T17:25:28.477777+05:30";
String date8 = "2017-06-20T17:25:28.477777-05:30";
String date9 = "2017-06-20T17:25:28.477777+0530";
String date10 = "2017-06-20T17:25:28.477777-0530";
Run Code Online (Sandbox Code Playgroud)
我已经尝试了以下日期时间格式化程序,但最后两个日期(date9,date10)失败.
private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
.optionalStart().appendZoneId().optionalEnd()
.optionalStart().appendOffset("+HH", "+00").optionalEnd()
.optionalStart().appendOffset("+HH:mm", "+00:00").optionalEnd()
.optionalStart().appendOffset("+HHmm", "+0000").optionalEnd().toFormatter();
Run Code Online (Sandbox Code Playgroud)
所有日期都date1可以date8正常工作,但我DateTimeParseException在尝试解析最后两个日期时得到了一个:
线程"main"java.time.format.DateTimeParseException中的异常:无法解析文本"2017-06-20T17:25:28.477777 + 0530",在索引29处找到未解析的文本
用于解析我正在使用的日期.
LocalDateTime.parse(date1, …Run Code Online (Sandbox Code Playgroud) import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Solution {
public static void main(String[] args) {
System.out.println(isDateOdd("MAY 1 2013"));
}
public static boolean isDateOdd(String date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy");
formatter = formatter.withLocale(Locale.ENGLISH);
LocalDate outputDate = LocalDate.parse(date, formatter);
return ((outputDate.getDayOfYear()%2!=0)?true:false);
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,如果从年初到某个日期过去的天数很奇怪.我尝试使用LocalDate来解析我的字符串中的日期(2013年5月1日),但是我收到错误:
线程"main"中的异常java.time.format.DateTimeParseException:无法在java.time.format的java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)的索引0处解析文本"MAY 1 2013"位于com.javarush.task.task08.task0827.Solution.isDateOdd(Solution.java:23)的java.time.LocalDate.parse(LocalDate.java:400)中的.DateTimeFormatter.parse(DateTimeFormatter.java:1851). javarush.task.task08.task0827.Solution.main(Solution.java:16)
哪里有问题?
public static String getLastWorkingDayOfPreviousMonth() {
LocalDate lastDayOfCurrentMonth = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
LocalDate lastWorkingDayOfMonth;
switch (DayOfWeek.of(lastDayOfCurrentMonth.get(ChronoField.DAY_OF_WEEK))) {
case SATURDAY:
lastWorkingDayOfMonth = lastDayOfCurrentMonth.minusMonths(1);
break;
case SUNDAY:
lastWorkingDayOfMonth = lastDayOfCurrentMonth.minusMonths(2);
break;
default:
lastWorkingDayOfMonth = lastDayOfCurrentMonth;
}
return getFormattedDate(lastWorkingDayOfMonth);
}
Run Code Online (Sandbox Code Playgroud)
以上是本月的最后一个工作日.如何Previous调整上述工作日的最后一个工作日?
我有一个时间戳,我通过String以下格式收到:
2016-10-17T12:42:04.000
我正在通过以下行将LocalDateTime其转换为a 添加一些天(然后返回到a String):
String _120daysLater = LocalDateTime.parse("2016-10-17T12:42:04.000",
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")).minusDays(120).toString());
Run Code Online (Sandbox Code Playgroud)
但是,我注意到它返回的响应会减少.000毫秒.
我不确定确保保留确切模式的最简洁方法.现在我只是添加一毫秒,并且可能有一种方法可以将旧版本SimpleDateFormat加入其中,但我希望有一种更好的方法.
我试图弄清楚如何确定特定星期一是某个月的第一个,第二个,第三个还是第四个星期一.我已经弄清楚如何获得使用LocalDate类的下一个星期一和月份的周.
LocalDate now = LocalDate.of(2018, 2, 1);
LocalDate nextMonday = now.with(next(DayOfWeek.MONDAY));
WeekFields weekFields = WeekFields.of(Locale.getDefault());
int week = nextMonday.get(weekFields.weekOfMonth());
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,代码获取下一个星期一及其所在的星期.星期是2月的第二周,但是星期一不是第二个星期一,它是第一个星期一.任何有关这方面的帮助将不胜感激.
我试图将工作日的字符串值转换为数字.
我正在调查Enum DayOfWeek(https://docs.oracle.com/javase/8/docs/api/java/time/DayOfWeek.html),但它不能按我预期的方式工作.
码
String n = "MONDAY";
System.out.println(n); //prints MONDAY
System.out.println(DayOfWeek.valueOf(n)); //also prints MONDAY - should print 1
Run Code Online (Sandbox Code Playgroud)
如何从字符串中获取相应的数字呢?
我有一个非常特殊的问题,我想在哪里解析"2019-12-25T17:00:00-05:00"
,以便它可以给我结果DEC 12 | Thursday | 5:00pm
我通过使用DateTimeFormatter和尝试了以下代码LocalDate
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssz", Locale.US);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("MM d | E | hh:mm a", Locale.US);
LocalDate date = LocalDate.parse("2019-12-25T17:00:00-05:00", inputFormatter);
String formattedDate = outputFormatter.format(date);
contentTextView.setText(formattedDate);
Run Code Online (Sandbox Code Playgroud)
但是它崩溃了 DateTimeParseException: Text '2019-12-25T17:00:00-05:00' could not be parsed at index 19
知道为什么会崩溃以及我的输出是否可以提供预期的结果吗?谢谢!
使用Java Instant类,如何舍入到最接近的秒?我不在乎是1毫秒,15毫秒还是999毫秒,所有数值都应以0毫秒舍入到下一秒。
我基本上想要
Instant myInstant = ...
myInstant.truncatedTo(ChronoUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
但方向相反。
我要解析的字符串类型:“ 36/2017”,其中36个是一年中的第一个星期,2017年是该年。
我的代码:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("w/uuuu")
.parseDefaulting(ChronoField.DAY_OF_WEEK, 1)
.toFormatter();
LocalDate date = LocalDate.parse("36/2017", formatter);
Run Code Online (Sandbox Code Playgroud)
我添加了默认日期。
我收到此消息:
java.time.format.DateTimeParseException: Text '36/2017' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {WeekOfWeekBasedYear[WeekFields[MONDAY,4]]=36, Year=2017, DayOfWeek=1},ISO of type java.time.format.Parsed
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?谢谢 !