{"record":{"id":"f9fac90a46dffd45","repo":"languagetool-org/languagetool","slug":"could-not-find-day-of-week-for-daystr-f9fac9","errorCode":null,"errorMessage":"Could not find day of week for '\" + dayStr + \"'","messagePattern":"Could not find day of week for '\" \\+ dayStr \\+ \"'","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"languagetool-language-modules/es/src/main/java/org/languagetool/rules/es/DateFilterHelper.java","lineNumber":43,"sourceCode":" * @since 4.3\n */\nclass DateFilterHelper {\n\n  protected Calendar getCalendar() {\n    return Calendar.getInstance(Locale.FRANCE);\n  }\n\n  @SuppressWarnings(\"ControlFlowStatementWithoutBraces\")\n  protected int getDayOfWeek(String dayStr) {\n    String day = dayStr.toLowerCase();\n    if (day.equals(\"do\") || day.equals(\"domingo\")) return Calendar.SUNDAY;\n    if (day.equals(\"lu\") || day.equals(\"lunes\")) return Calendar.MONDAY;\n    if (day.equals(\"ma\") || day.equals(\"martes\")) return Calendar.TUESDAY;\n    if (day.equals(\"mi\") || day.equals(\"miércoles\")) return Calendar.WEDNESDAY;\n    if (day.equals(\"ju\") || day.equals(\"jueves\")) return Calendar.THURSDAY;\n    if (day.equals(\"vi\") || day.equals(\"viernes\")) return Calendar.FRIDAY;\n    if (day.equals(\"sa\") || day.equals(\"sábado\")) return Calendar.SATURDAY;\n    throw new RuntimeException(\"Could not find day of week for '\" + dayStr + \"'\");\n  }\n\n  @SuppressWarnings(\"ControlFlowStatementWithoutBraces\")\n  protected String getDayOfWeek(Calendar date) {\n    String englishDay = date.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.UK);\n    if (englishDay.equals(\"Sunday\")) return \"domingo\";\n    if (englishDay.equals(\"Monday\")) return \"lunes\";\n    if (englishDay.equals(\"Tuesday\")) return \"martes\";\n    if (englishDay.equals(\"Wednesday\")) return \"miércoles\";\n    if (englishDay.equals(\"Thursday\")) return \"jueves\";\n    if (englishDay.equals(\"Friday\")) return \"viernes\";\n    if (englishDay.equals(\"Saturday\")) return \"sábado\";\n    return \"\";\n  }\n\n  @SuppressWarnings({\"ControlFlowStatementWithoutBraces\", \"MagicNumber\"})\n  protected int getMonth(String monthStr) {\n    String mon = monthStr.toLowerCase();","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-language-modules/es/src/main/java/org/languagetool/rules/es/DateFilterHelper.java#L25-L61","documentation":"DateFilterHelper.getDayOfWeek(String) maps Spanish day-of-week abbreviations/names ('lu', 'lunes', ... 'sábado') to java.util.Calendar constants. If the input string matches none of the recognized forms it throws RuntimeException. Note it recognizes 'lunes'..'sábado' but the day list omits 'domingo', so unexpected abbreviations fail.","triggerScenarios":"A Spanish date rule filter calls getDayOfWeek(dayStr) with a captured token that is not one of lu/lunes, ma/martes, mi/miércoles, ju/jueves, vi/viernes, sa/sábado — e.g. 'do'/'domingo', 'miercoles' without accent, or 'L' uppercase variant.","commonSituations":"Rule regex captures a day token outside the whitelist; text uses 'domingo' while the mapping lacks it; accented vs unaccented spellings ('miercoles' vs 'miércoles').","solutions":["Normalize the input before the call (lowercase, strip accents) and add missing accepted forms (e.g. 'do'/'domingo') to the mapping.","Verify the rule's regex token is supposed to match a day; restrict the pattern to the supported day list.","Add a unit test covering all day spellings the rule can capture."],"exampleFix":"// before\nif (day.equals(\"sa\") || day.equals(\"sábado\")) return Calendar.SATURDAY;\nthrow new RuntimeException(\"Could not find day of week for '\" + dayStr + \"'\");\n// after\nif (day.equals(\"sa\") || day.equals(\"sábado\")) return Calendar.SATURDAY;\nif (day.equals(\"do\") || day.equals(\"domingo\")) return Calendar.SUNDAY;","handlingStrategy":"validation","validationCode":"Set<String> validDays = Set.of(\"lu\",\"lunes\",\"ma\",\"martes\",\"mi\",\"miércoles\",\"ju\",\"jueves\",\"vi\",\"viernes\",\"sa\",\"sábado\");\nif (!validDays.contains(dayStr.toLowerCase())) throw new IllegalArgumentException(\"Unsupported day: \" + dayStr);","typeGuard":null,"tryCatchPattern":"try {\n  int dow = helper.getDayOfWeek(dayStr);\n} catch (RuntimeException e) {\n  LOG.warn(\"Unrecognized day token '{}' — skipping date check\", dayStr);\n}","preventionTips":["Lowercase and accent-normalize tokens before calling the helper","Restrict rule regexes to the exact day spellings the helper supports","Include all supported day spellings in unit tests"],"tags":["java","languagetool","date-parsing","spanish"],"backgroundTag":"invalid-enum-value","analyzedSha":"2e990059ce67d5e2a0f7f7ca5d31160c6709df4b","analyzedAt":"2026-09-06T09:20:17.015Z","contentChangedAt":"2026-09-06T09:20:17.015Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}