{"record":{"id":"f8113d4008ca2fb7","repo":"languagetool-org/languagetool","slug":"could-not-find-day-of-week-for-daystr-f8113d","errorCode":null,"errorMessage":"Could not find day of week for '<dayStr>'","messagePattern":"Could not find day of week for '<dayStr>'","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/DateFilterHelper.java","lineNumber":45,"sourceCode":" * @since 4.3\n */\nclass DateFilterHelper {\n\n  protected Calendar getCalendar() {\n    return Calendar.getInstance(Locale.UK);\n  }\n\n  @SuppressWarnings(\"ControlFlowStatementWithoutBraces\")\n  protected int getDayOfWeek(String dayStr) {\n    String day = StringTools.trimSpecialCharacters(dayStr).toLowerCase();  // quickfix for special characters like soft hyphens\n    if (day.startsWith(\"dom\")) return Calendar.SUNDAY;\n    if (day.startsWith(\"seg\")) return Calendar.MONDAY;\n    if (day.startsWith(\"ter\")) return Calendar.TUESDAY;\n    if (day.startsWith(\"qua\")) return Calendar.WEDNESDAY;\n    if (day.startsWith(\"qui\")) return Calendar.THURSDAY;\n    if (day.startsWith(\"sex\")) return Calendar.FRIDAY;\n    if (day.startsWith(\"sáb\")) 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 \"segunda-feira\";\n    if (englishDay.equals(\"Tuesday\")) return \"terça-feira\";\n    if (englishDay.equals(\"Wednesday\")) return \"quarta-feira\";\n    if (englishDay.equals(\"Thursday\")) return \"quinta-feira\";\n    if (englishDay.equals(\"Friday\")) return \"sexta-feira\";\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 = StringTools.trimSpecialCharacters(monthStr).toLowerCase();  // quickfix for special characters like soft hyphens","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/DateFilterHelper.java#L27-L63","documentation":"Portuguese DateFilterHelper.getDayOfWeek maps Portuguese weekday tokens (seg, ter, qua, qui, sex, sáb prefixes) to Calendar constants and throws this RuntimeException when none match. There is no Sunday ('dom'/'domingo') branch, so any Sunday token reaching the method throws.","triggerScenarios":"A Portuguese date rule matches 'domingo'/'dom' (or any unrecognized weekday token) and calls getDayOfWeek; also 'sab' without the accent fails because the check is startsWith(\"sáb\").","commonSituations":"Sunday-containing dates; unaccented input ('sabado', 'sab') from ASCII-normalized text; new abbreviations added to a rule regex without updating the helper.","solutions":["Add Sunday mapping: if (day.startsWith(\"dom\")) return Calendar.SUNDAY;","Handle both accented and unaccented 'sab'/'sáb': if (day.startsWith(\"sáb\") || day.startsWith(\"sab\")) return Calendar.SATURDAY;","Check the message's day string and align the rule regex with the supported prefixes"],"exampleFix":"// before\nif (day.startsWith(\"sáb\")) return Calendar.SATURDAY;\nthrow new RuntimeException(\"Could not find day of week for '\" + dayStr + \"'\");\n// after\nif (day.startsWith(\"sáb\") || day.startsWith(\"sab\")) return Calendar.SATURDAY;\nif (day.startsWith(\"dom\")) return Calendar.SUNDAY;\nthrow new RuntimeException(\"Could not find day of week for '\" + dayStr + \"'\");","handlingStrategy":"validation","validationCode":"if (dayStr == null || !dayStr.toLowerCase().matches(\"(seg|ter|qua|qui|sex|sáb|sab|dom).*\")) throw new IllegalArgumentException(\"Unrecognized Portuguese weekday: \" + dayStr);","typeGuard":"boolean isPortugueseWeekday(String s) { String d = s == null ? \"\" : s.toLowerCase(); return d.startsWith(\"seg\")||d.startsWith(\"ter\")||d.startsWith(\"qua\")||d.startsWith(\"qui\")||d.startsWith(\"sex\")||d.startsWith(\"sáb\")||d.startsWith(\"sab\")||d.startsWith(\"dom\"); }","tryCatchPattern":"try { day = helper.getDayOfWeek(dayStr); } catch (RuntimeException e) { log.debug(\"Portuguese weekday unmatched: {}\", dayStr); }","preventionTips":["Note Sunday ('dom'/'domingo') has no mapping today — test for it","Handle unaccented 'sab' variants from ASCII-normalized text","Keep rule regex alternation and prefix map in lockstep via tests"],"tags":["java","nlp","grammar-rules","date-validation","unicode"],"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-14T05:17:10.506Z"}