You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Java代码实现将表格所有值(含日期)统一读取为字符串

修改方案

核心逻辑是调整所有赋值方法的规则,不管传入数字、日期、时间类型,都先转成字符串存入valueStr字段,你可以根据自身需要调整不同类型的字符串输出格式。

具体修改点

  • 重写setNumber、setDate、setDateTime方法,将传入的参数转为指定格式的字符串赋值给valueStr,不再置空该字段
  • 不需要保留原始数字、日期类型取值能力的话,可以直接删除valueNumber字段,以及getNumber、getDate、getDateTime三个方法,进一步简化代码
  • 日期、时间转字符串的格式可以自定义,示例中用了常用的yyyy-MM-dd和yyyy-MM-dd HH:mm:ss格式,你可以按需调整

修改后完整代码示例

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class CellValue {
    public String valueStr;
    // 若不需要保留原始数字/日期值,可删除下面这行
    public BigDecimal valueNumber;

    public String getString() {
        return valueStr;
    }

    public void setNull() {
        valueNumber = null;
        valueStr = null;
    }

    public void setString(String value) {
        valueStr = value;
        // 若不需要保留原始数字/日期值,可删除下面这行
        valueNumber = null;
    }

    // 若不需要保留原始数字取值能力,可删除该方法
    public BigDecimal getNumber() {
        return valueNumber;
    }

    public void setNumber(BigDecimal value) {
        // 数字转字符串,stripTrailingZeros用于去掉末尾无用的0,比如12.00转成12
        valueStr = value.stripTrailingZeros().toPlainString();
        // 若不需要保留原始数字/日期值,可删除下面这行
        valueNumber = value;
    }

    // 若不需要保留原始日期取值能力,可删除该方法
    public LocalDate getDate() {
        if (getNumber() == null)
            return null;
        return LocalDate.ofEpochDay(((long) getNumber().doubleValue()) - 25569);
    }

    public void setDate(LocalDate date) {
        // 自定义日期转字符串的格式
        valueStr = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        // 若不需要保留原始数字/日期值,可删除下面这行
        valueNumber = BigDecimal.valueOf(date.toEpochDay() + 25569);
    }

    // 若不需要保留原始时间取值能力,可删除该方法
    public LocalDateTime getDateTime() {
        if (getNumber() == null)
            return null;
        return LocalDateTime.ofEpochSecond((long) (getNumber().doubleValue() - 25569) * 86400, 0, ZoneOffset.UTC);
    }

    public void setDateTime(LocalDateTime dateTime) {
        // 自定义时间转字符串的格式
        valueStr = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        // 若不需要保留原始数字/日期值,可删除下面这行
        valueNumber = BigDecimal.valueOf(dateTime.toEpochSecond(ZoneOffset.UTC) / 86400. + 25569);
    }
}

修改完成后,不管你调用哪个set方法赋值,最后调用getString()就能拿到统一格式的字符串结果。

内容的提问来源于stack exchange,提问作者codeitforfuture

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:54:01