Posted 17 February 2025, 2:27 am EST
- Updated 17 February 2025, 2:32 am EST
Hi,
Please note that this custom or explicitly defined format in the cell will remain unchanged except for language regardless of any alterations in cultural settings.
Additionally, the behavior you’re experiencing is by design. If a cell has a specific format defined, any changes in cultural settings won’t impact that format except for language. Cultural settings affect the editing mode format and those that have auto format applied by spreadjs.
For instance, in cells B1 and C1, I’ve entered date values that default to the short date format due to SpreadJS parsing and applying auto-formatting. Consequently, both B1 and C1 will have the short-date format by default. Then, I manually applied the mm/dd/yyyy format to cell B1, explicitly defining its format. Meanwhile, cell C1 does not have an explicitly defined format. Therefore, when changing cultural settings, only the format of cell C1 will be affected, as no specific format was set, whereas, for cell B1, only the editing mode format will be impacted. You can confirm this by double-clicking on cell B1. Please refer to the attached GIF “Verify.gif” and sample for clarification.
Verify Gif: 
Sample: https://jscodemine.mescius.io/share/pegigx-kDEqhtUkqlda6aQ/?IsEmbed=false&Theme=Unset&PreviewDirection=0&IsEditorShow=true&IsExplorerShow=true&IsPreviewShow=true&IsConsoleShow=true&IsRunBTNShow=false&IsResetBTNShow=false&IsOpenInCodemineBTNShow=false&PanelWidth=20&PanelWidth=50&PanelWidth=30&defaultOpen={"OpenedFileName"%3A["%2Findex.html"]%2C"ActiveFile"%3A"%2Findex.html"}
Regarding “The underlying value changes datetime format, but the display remains.”, it seems that formatting has been explicitly applied to the cell, which is why it does not change when the culture is modified in your end.
Refer to the sample and the attached GIF “Steps.gif”, where the date is automatically formatted according to the culture when the culture is changed.
if (currentLocale != 'en-US') {
var defaultCulture = GC.Spread.Common.CultureManager.culture();
var defaultCultureInfo = GC.Spread.Common.CultureManager.getCultureInfo(defaultCulture);
var currentCultureInfo = cultureInfos?.find(q => q.name() == currentLocale);
if (currentCultureInfo != null) {
var dateTimeFormat = currentCultureInfo.DateTimeFormat;
defaultCultureInfo.DateTimeFormat = dateTimeFormat;
const newDefaultCultureName = "NewCulture";
GC.Spread.Common.CultureManager.addCultureInfo(newDefaultCultureName, defaultCultureInfo);
GC.Spread.Common.CultureManager.culture(newDefaultCultureName);
}
}
Steps gif: 
Sample: https://jscodemine.mescius.io/share/6UW18PeOr0_t3mjpsj_NCw/?defaultOpen={"OpenedFileName"%3A["%2Findex.html"]%2C"ActiveFile"%3A"%2Findex.html"}
Please feel free to reach out if you encounter any further issues or require additional guidance.
Best Regards,