标签: java-time

使用哪个时区是java.sql.Date toLocalDate

我很惊讶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设置?

java sqldatetime java-8 java-time

3
推荐指数
1
解决办法
1301
查看次数

如何在一个DateTimeFormater Java 8中处理所有区域偏移

我需要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)

datetime-parsing java-8 java-time zoneddatetime

3
推荐指数
1
解决办法
712
查看次数

LocalDate异常错误

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)

哪里有问题?

java date-parsing java-8 java-time localdate

3
推荐指数
1
解决办法
1650
查看次数

使用LocalDate上个月的最后一个工作日

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调整上述工作日的最后一个工作日?

java date java-time localdate

3
推荐指数
2
解决办法
3052
查看次数

Java 8 LocalDateTime - 如何在String转换中保留.000毫秒

我有一个时间戳,我通过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加入其中,但我希望有一种更好的方法.

java format datetime datetime-format java-time

3
推荐指数
1
解决办法
7338
查看次数

Java 8 LocalDate:确定每月的星期几(第1,第2,第3等)

我试图弄清楚如何确定特定星期一是某个月的第一个,第二个,第三个还是第四个星期一.我已经弄清楚如何获得使用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月的第二周,但是星期一不是第二个星期一,它是第一个星期一.任何有关这方面的帮助将不胜感激.

java dayofweek java-8 java-time localdate

3
推荐指数
1
解决办法
665
查看次数

Java DayOfWeek将日期名称(字符串)转换为日期编号

我试图将工作日的字符串值转换为数字.

我正在调查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)

如何从字符串中获取相应的数字呢?

java dayofweek java-time

3
推荐指数
1
解决办法
544
查看次数

如何将UTC偏移量dateformat字符串解析为以|分隔的结果日期 符号

我有一个非常特殊的问题,我想在哪里解析"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 android datetime-format java-time java-date

3
推荐指数
1
解决办法
120
查看次数

Java Instant向上舍入到下一秒

使用Java Instant类,如何舍入到最接近的秒?我不在乎是1毫秒,15毫秒还是999毫秒,所有数值都应以0毫秒舍入到下一秒。

我基本上想要

Instant myInstant = ...

myInstant.truncatedTo(ChronoUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

但方向相反。

java java-time

3
推荐指数
2
解决办法
173
查看次数

将具有星期和年份的字符串解析为LocalDate

我要解析的字符串类型:“ 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)

任何的想法 ?谢谢 !

java date java-time

3
推荐指数
1
解决办法
62
查看次数