【问题标题】:Declare string constants for date formats instead of explicitly having to write string values [closed]为日期格式声明字符串常量,而不是显式地写入字符串值 [关闭]
【发布时间】:2016-02-02 12:00:23
【问题描述】:

将日期格式存储为可在整个 Web 应用程序中使用的字符串常量是否可取/良好的编程习惯?

例如,不是在代码隐藏中写.ToString("dd.MM.yyyy"),而是使用.ToString(MyDateClass.DateFormat1)。如果.ToString("yyyy.MM.dd") 在其他地方使用,我们将创建 MyDateClass.DateFormat2 并使用.ToString(MyDateClass.DateFormat2)

例如,对于 JS 代码,可以有 "dd.MM.yyyy""yyyy.MM.dd" 的全局字符串变量,而这些变量将被使用。

【问题讨论】:

  • 这是一个基于意见的问题,更适合在programmers.stackexchange.com 上发布。对于它的价值,我的意见是肯定的 - 我自己做了这个,为日期格式常量使用有意义的名称。
  • @redbirdo 基于意见并不适合在 Programmers.SE 上发布内容。这个问题在技术上对我们来说是主题,但由于过于宽泛/不明确/基于意见,它会很快结束。
  • 您的日期时间库可能已经定义了一些有用的模式。 ISO 8601 标准指定的合理格式在 java.timeJoda-Time 中都预定义。
  • @redbirdo 谢谢!将尝试programmers.stackexchange.com

标签: java c# date datetime design-patterns


【解决方案1】:

您可以使用枚举类来表示您的日期格式。

例如这样:

public enum DateFormat {

    dd_MM_yyyy {
        @Override
        public String toString() {
            return "dd.MM.yyyy";
        }
    },
    yyyy_MM_dd {
        @Override
        public String toString() {
            return "yyyy.MM.dd";
        }
    }
}

然后只使用枚举:DateFormat.dd_MM_yyyy.toString();

【讨论】:

  • 很好的答案,除了在枚举上覆盖 toString 仅建议程序员使用(调试/日志记录)而不是业务逻辑。为了生产性使用,请根据您的目的向枚举中添加一个方法。在这种情况下,呈现格式模式。将方法命名为 DateFormat.dd_MM_yyyy.pattern()
  • 您在上面的代码中缺少{} 大括号,导致编译错误。请更新它。
  • @BasilBourque 在 java 12 上测试过,你的方法行不通。我不知道它是否与新的 java 12 有关。但它不起作用。它给了我一个编译错误。
  • @Merv 我发布了 this Question 和一个答案,展示了如何在 Java 枚举中保存一些 DateTimeFormatter 对象。
  • @BasilBourque 谢谢兄弟。但我只是创建了一个新类并使用了常量。
【解决方案2】:

这是标准做法,应该扩展到应用程序中使用的其他“魔术字符串”,例如正则表达式。我倾向于在我的项目中使用常量文件,在那里我可以将逻辑相关的常量组合在一起并在其他类和项目中引用它们。

如果一个常量被广泛使用,那么常量文件的范围应该反映出来——如果范围更窄,考虑使用一个更加本地化的文件,或者在某些情况下只是将常量放在类文件本身中,如果使用其中仅限于该类。

我还建议您使用的名称反映其含义,例如,使用 DateFormatDDMMYYYY 和 DateFormatYYYYMMDD 之类的名称代替 DateFormat1 和 DateFormat2。

【讨论】:

  • 我明白应该尽量避免使用魔术字符串。但是,如果人们认为日期字段的格式不会在应用程序中经常更改(可能永远不会),那么为每种日期格式系统地创建常量而不是简单地说明字符串值本身是否仍然有意义?似乎需要维护额外的代码?
  • 假设您决定不再以“dd.MM.yyyy”格式显示日期,而是将它们显示为“dd/MM/yyyy”。如果您在整个应用程序中都使用了常量,那么只需更改一项的值就会导致应用程序中的所有日期都以新格式显示,所以是的,它仍然值得。此外,正如您所说,如果日期格式不经常更改,则无需对常量文件进行任何维护。
  • 我认为像“DateFormatDDMMYYYY”这样的名称没有意义,如果格式发生变化,实际上会产生误导。有意义的可能是例如DATE_FORMAT_SHORT、DATE_FORMAT_LIST 或 DATE_FORMAT_MONTH_YEAR 等,具体取决于使用特定格式的上下文。
猜你喜欢
  • 2014-03-12
  • 2012-02-14
  • 1970-01-01
  • 2016-12-06
  • 2014-05-06
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 2022-12-07
相关资源
最近更新 更多