KFormat Class
Class for formatting numbers and datetimes. More...
Header: | #include <KFormat> |
CMake: | find_package(KF6 REQUIRED COMPONENTS CoreAddons) target_link_libraries(mytarget PRIVATE KF6::CoreAddons) |
Since: | 5.0 |
Public Types
enum | BinarySizeUnits { DefaultBinaryUnits, UnitByte, UnitKiloByte, UnitMegaByte, UnitGigaByte, …, UnitYottaByte } |
enum | BinaryUnitDialect { DefaultBinaryDialect, IECBinaryDialect, JEDECBinaryDialect, MetricBinaryDialect } |
enum | DurationFormatOption { DefaultDuration, InitialDuration, ShowMilliseconds, HideSeconds, FoldHours } |
flags | DurationFormatOptions |
(since 5.49) enum class | Unit { Other, Bit, Byte, Meter, Hertz } |
(since 5.49) enum class | UnitPrefix { AutoAdjust, Yocto, Zepto, Atto, Femto, …, Yotta } |
Public Functions
KFormat(const QLocale &locale = QLocale()) | |
QString | formatByteSize(double size, int precision = 1, KFormat::BinaryUnitDialect dialect = KFormat::DefaultBinaryDialect, KFormat::BinarySizeUnits units = KFormat::DefaultBinaryUnits) const |
QString | formatDecimalDuration(quint64 msecs, int decimalPlaces = 2) const |
QString | formatDuration(quint64 msecs, KFormat::DurationFormatOptions options = KFormat::DefaultDuration) const |
QString | formatRelativeDate(const QDate &date, QLocale::FormatType format) const |
QString | formatRelativeDateTime(const QDateTime &dateTime, QLocale::FormatType format) const |
QString | formatSpelloutDuration(quint64 msecs) const |
(since 5.49) QString | formatValue(double value, const QString &unit, int precision = 1, KFormat::UnitPrefix prefix = KFormat::UnitPrefix::AutoAdjust) const |
(since 5.49) QString | formatValue(double value, KFormat::Unit unit, int precision = 1, KFormat::UnitPrefix prefix = KFormat::UnitPrefix::AutoAdjust, KFormat::BinaryUnitDialect dialect = KFormat::DefaultBinaryDialect) const |
(since 5.74) QString | formatValue(double value, const QString &unit, int precision, KFormat::UnitPrefix prefix, KFormat::BinaryUnitDialect dialect) const |
Detailed Description
KFormat provides support for formatting numbers and datetimes in formats that are not supported by QLocale.
Member Type Documentation
enum KFormat::BinarySizeUnits
These binary units are used in KDE by the formatByteSize() function.
NOTE: There are several different units standards: 1) SI (i.e. metric), powers-of-10. 2) IEC, powers-of-2, with specific units KiB, MiB, etc. 3) JEDEC, powers-of-2, used for solid state memory sizing which is why you see flash cards labels as e.g. 4GB. These (ab)use the metric units. Although JEDEC only defines KB, MB, GB, if JEDEC is selected all units will be powers-of-2 with metric prefixes for clarity in the event of sizes larger than 1024 GB.
Although 3 different dialects are possible this enum only uses metric names since adding all 3 different names of essentially the same unit would be pointless. Use BinaryUnitDialect to control the exact units returned.
Constant | Value | Description |
---|---|---|
KFormat::DefaultBinaryUnits | -1 | Auto-choose a unit such that the result is in the range [0, 1000 or 1024) |
KFormat::UnitByte | 0 | B 1 byte |
KFormat::UnitKiloByte | 1 | KiB/KB/kB 1024/1000 bytes |
KFormat::UnitMegaByte | 2 | MiB/MB/MB 2^20/10^06 bytes |
KFormat::UnitGigaByte | 3 | GiB/GB/GB 2^30/10^09 bytes |
KFormat::UnitTeraByte | 4 | TiB/TB/TB 2^40/10^12 bytes |
KFormat::UnitPetaByte | 5 | PiB/PB/PB 2^50/10^15 bytes |
KFormat::UnitExaByte | 6 | EiB/EB/EB 2^60/10^18 bytes |
KFormat::UnitZettaByte | 7 | ZiB/ZB/ZB 2^70/10^21 bytes |
KFormat::UnitYottaByte | 8 | YiB/YB/YB 2^80/10^24 bytes |
See also BinaryUnitDialect and formatByteSize.
enum KFormat::BinaryUnitDialect
This enum chooses what dialect is used for binary units.
Note: Although JEDEC abuses the metric prefixes and can therefore be confusing, it has been used to describe *memory* sizes for quite some time and programs should therefore use either Default, JEDEC, or IEC 60027-2 for memory sizes.
On the other hand network transmission rates are typically in metric so Default, Metric, or IEC (which is unambiguous) should be chosen.
Normally choosing DefaultBinaryDialect is the best option as that uses the user's selection for units. If the user has not selected a preference, IECBinaryDialect will typically be used.
Constant | Value | Description |
---|---|---|
KFormat::DefaultBinaryDialect | -1 | Used if no specific preference |
KFormat::IECBinaryDialect | 0 | KiB, MiB, etc. 2^(10*n) |
KFormat::JEDECBinaryDialect | 1 | KB, MB, etc. 2^(10*n) |
KFormat::MetricBinaryDialect | 2 | SI Units, kB, MB, etc. 10^(3*n) |
See also BinarySizeUnits and formatByteSize.
enum KFormat::DurationFormatOption
flags KFormat::DurationFormatOptions
Format flags for formatDuration()
Constant | Value | Description |
---|---|---|
KFormat::DefaultDuration | 0x0 | Default formatting in localized 1:23:45 format |
KFormat::InitialDuration | 0x1 | Default formatting in localized 1h23m45s format |
KFormat::ShowMilliseconds | 0x2 | Include milliseconds in format, e.g. 1:23:45.678 |
KFormat::HideSeconds | 0x4 | Hide the seconds, e.g. 1:23 or 1h23m, overrides ShowMilliseconds |
KFormat::FoldHours | 0x8 | Fold the hours into the minutes, e.g. 83:45 or 83m45s, overrides HideSeconds |
The DurationFormatOptions type is a typedef for QFlags<DurationFormatOption>. It stores an OR combination of DurationFormatOption values.
[since 5.49]
enum class KFormat::Unit
These units are used in KDE by the formatValue() function.
Constant | Value | Description |
---|---|---|
KFormat::Unit::Other | 0 | other |
KFormat::Unit::Bit | 1 | bit |
KFormat::Unit::Byte | 2 | B |
KFormat::Unit::Meter | 3 | m |
KFormat::Unit::Hertz | 4 | Hz |
This enum was introduced in 5.49.
See also formatValue.
[since 5.49]
enum class KFormat::UnitPrefix
These prefixes are used in KDE by the formatValue() function.
IEC prefixes are only defined for integral units of information, e.g. bits and bytes.
Constant | Value | Description |
---|---|---|
KFormat::UnitPrefix::AutoAdjust | -128 | Auto-choose a unit such that the result is in the range [0, 1000 or 1024) |
KFormat::UnitPrefix::Yocto | 0 | –/-/y 10^-24 |
KFormat::UnitPrefix::Zepto | 1 | –/-/z 10^-21 |
KFormat::UnitPrefix::Atto | 2 | –/-/a 10^-18 |
KFormat::UnitPrefix::Femto | 3 | –/-/f 10^-15 |
KFormat::UnitPrefix::Pico | 4 | –/-/p 10^-12 |
KFormat::UnitPrefix::Nano | 5 | –/-/n 10^-9 |
KFormat::UnitPrefix::Micro | 6 | –/-/µ 10^-6 |
KFormat::UnitPrefix::Milli | 7 | –/-/m 10^-3 |
KFormat::UnitPrefix::Centi | 8 | –/-/c 0.01 |
KFormat::UnitPrefix::Deci | 9 | –/-/d 0.1 |
KFormat::UnitPrefix::Unity | 10 | "" 1 |
KFormat::UnitPrefix::Deca | 11 | –/-/da 10 |
KFormat::UnitPrefix::Hecto | 12 | –/-/h 100 |
KFormat::UnitPrefix::Kilo | 13 | Ki/K/k 1024/1000 |
KFormat::UnitPrefix::Mega | 14 | Mi/M/M 2^20/10^06 |
KFormat::UnitPrefix::Giga | 15 | Gi/G/G 2^30/10^09 |
KFormat::UnitPrefix::Tera | 16 | Ti/T/T 2^40/10^12 |
KFormat::UnitPrefix::Peta | 17 | Pi/P/P 2^50/10^15 |
KFormat::UnitPrefix::Exa | 18 | Ei/E/E 2^60/10^18 |
KFormat::UnitPrefix::Zetta | 19 | Zi/Z/Z 2^70/10^21 |
KFormat::UnitPrefix::Yotta | 20 | Yi/Y/Y 2^80/10^24 |
This enum was introduced in 5.49.
See also BinarySizeUnits and formatValue.
Member Function Documentation
[explicit]
KFormat::KFormat(const QLocale &locale = QLocale())
Constructs a KFormat.
locale the locale to use, defaults to the system locale
QString KFormat::formatByteSize(double size, int precision = 1, KFormat::BinaryUnitDialect dialect = KFormat::DefaultBinaryDialect, KFormat::BinarySizeUnits units = KFormat::DefaultBinaryUnits) const
Converts size from bytes to the appropriate string representation using the binary unit dialect dialect and the specific units units.
Example:
QString metric, iec, jedec, small; metric = formatByteSize(1000, 1, KFormat::MetricBinaryDialect, KFormat::UnitKiloByte); iec = formatByteSize(1024, 1, KFormat::IECBinaryDialect, KFormat::UnitKiloByte); jedec = formatByteSize(1024, 1, KFormat::JEDECBinaryDialect, KFormat::UnitKiloByte); small = formatByteSize(100); // metric == "1.0 kB", iec == "1.0 KiB", jedec == "1.0 KB", small == "100 B"
size size in bytes
precision number of places after the decimal point to use. KDE uses 1 by default so when in doubt use 1. Whenever KFormat::UnitByte is used (either explicitly or autoselected from KFormat::DefaultBinaryUnits), the fractional part is always omitted.
dialect binary unit standard to use. Use DefaultBinaryDialect to use the localized user selection unless you need to use a specific unit type (such as displaying a flash memory size in JEDEC).
units specific unit size to use in result. Use DefaultBinaryUnits to automatically select a unit that will return a sanely-sized number.
Returns converted size as a translated string including the units. E.g. "1.23 KiB", "2 GB" (JEDEC), "4.2 kB" (Metric).
See also BinarySizeUnits and BinaryUnitDialect.
QString KFormat::formatDecimalDuration(quint64 msecs, int decimalPlaces = 2) const
Given a number of milliseconds, converts that to a string containing the localized equivalent to the requested decimal places.
e.g. given formatDuration(60000), returns "1.0 minutes"
msecs Time duration in milliseconds
decimalPlaces Decimal places to round off to, defaults to 2
Returns converted duration as a string - e.g. "5.5 seconds" "23.0 minutes"
QString KFormat::formatDuration(quint64 msecs, KFormat::DurationFormatOptions options = KFormat::DefaultDuration) const
Given a number of milliseconds, converts that to a string containing the localized equivalent, e.g. 1:23:45
msecs Time duration in milliseconds
options options to use in the duration format
Returns converted duration as a string - e.g. "1:23:45" "1h23m"
QString KFormat::formatRelativeDate(const QDate &date, QLocale::FormatType format) const
Returns a string formatted to a relative date style.
If the date falls within one week before or after the current date then a relative date string will be returned, such as: * Yesterday * Today * Tomorrow * Last Tuesday * Next Wednesday
If the date falls outside this period then the format is used.
date the date to be formatted
format the date format to use
Returns the date as a string
QString KFormat::formatRelativeDateTime(const QDateTime &dateTime, QLocale::FormatType format) const
Returns a string formatted to a relative datetime style.
If the dateTime falls within one week before or after the current date then a relative date string will be returned, such as: * Yesterday at 3:00pm * Today at 3:00pm * Tomorrow at 3:00pm * Last Tuesday at 3:00pm * Next Wednesday at 3:00pm
If the dateTime falls within one hour of the current time. Then a shorter version is displayed: * Just a moment ago (for within the same minute) * 15 minutes ago
If the dateTime falls outside this period then the date is rendered as: * Monday, 7 September, 2021 at 7:00 PM : date formatted format + " at " + time formatted with format
With format LongFormat, time format used is set to ShortFormat (to omit timezone and seconds).
First character is capitalized.
dateTime the date to be formatted
format the date format to use
Returns the date as a string
QString KFormat::formatSpelloutDuration(quint64 msecs) const
Given a number of milliseconds, converts that to a spell-out string containing the localized equivalent.
e.g. given formatSpelloutDuration(60001) returns "1 minute" given formatSpelloutDuration(62005) returns "1 minute and 2 seconds" given formatSpelloutDuration(90060000) returns "1 day and 1 hour"
msecs Time duration in milliseconds
Returns converted duration as a string. Units not interesting to the user, for example seconds or minutes when the first unit is day, are not returned because they are irrelevant. The same applies for seconds when the first unit is hour.
[since 5.49]
QString KFormat::formatValue(double value, const QString &unit, int precision = 1, KFormat::UnitPrefix prefix = KFormat::UnitPrefix::AutoAdjust) const
Converts value to the appropriate string representation
Example:
QString bits, slow, fast; // sets bits to "1.0 kbit", slow to "1.0 kbit/s" and fast to "12.3 Mbit/s". bits = format.formatValue(1000, QStringLiteral("bit"), 1, KFormat::UnitPrefix::Kilo); slow = format.formatValue(1000, QStringLiteral("bit/s"); fast = format.formatValue(12.3e6, QStringLiteral("bit/s");
value value to be formatted
precision number of places after the decimal point to use. KDE uses 1 by default so when in doubt use 1.
unit unit to use in result.
prefix specific prefix to use in result. Use UnitPrefix::AutoAdjust to automatically select an appropriate prefix.
Returns converted size as a translated string including prefix and unit. E.g. "1.2 kbit", "2.4 kB", "12.3 Mbit/s"
This function was introduced in 5.49.
See also UnitPrefix.
[since 5.49]
QString KFormat::formatValue(double value, KFormat::Unit unit, int precision = 1, KFormat::UnitPrefix prefix = KFormat::UnitPrefix::AutoAdjust, KFormat::BinaryUnitDialect dialect = KFormat::DefaultBinaryDialect) const
Converts value to the appropriate string representation
Example:
// sets formatted to "1.0 kbit" auto formatted = format.formatValue(1000, KFormat::Unit::Bit, 1, KFormat::UnitPrefix::Kilo);
value value to be formatted
precision number of places after the decimal point to use. KDE uses 1 by default so when in doubt use 1.
unit unit to use in result.
prefix specific prefix to use in result. Use UnitPrefix::AutoAdjust to automatically select an appropriate prefix.
dialect prefix standard to use. Use DefaultBinaryDialect to use the localized user selection unless you need to use a specific unit type. Only meaningful for KFormat::Unit::Byte, and ignored for all other units.
Returns converted size as a translated string including prefix and unit. E.g. "1.23 KiB", "2 GB" (JEDEC), "4.2 kB" (Metric), "1.2 kbit".
This function was introduced in 5.49.
See also Unit, UnitPrefix, and BinaryUnitDialect.
[since 5.74]
QString KFormat::formatValue(double value, const QString &unit, int precision, KFormat::UnitPrefix prefix, KFormat::BinaryUnitDialect dialect) const
Converts value to the appropriate string representation.
Example:
QString iec, jedec, metric; // Sets iec to "1.0 KiB/s", jedec to "1.0 KB/s" and metric to "1.0 kB/s" iec = format.formatValue(1024, QStringLiteral("B/s"), 1, KFormat::UnitPrefix::AutoAdjust, KFormat::IECBinaryDialect); jedec = format.formatValue(1024, QStringLiteral("B/s"), 1, KFormat::UnitPrefix::AutoAdjust, KFormat::JEDECBinaryDialect); metric = format.formatValue(1000, QStringLiteral("B/s"), 1, KFormat::UnitPrefix::AutoAdjust, KFormat::MetricBinaryDialect);
value value to be formatted
precision number of places after the decimal point to use. 1 is used by default; when in doubt use 1
unit unit to use in result
prefix specific prefix to use in result. Use UnitPrefix::AutoAdjust to automatically select an appropriate prefix
dialect prefix standard to use. Use DefaultBinaryDialect to use the localized user selection unless you need to use a specific unit type
Returns converted size as a translated string including prefix and unit. E.g. "1.2 kbit", "2.4 kB", "12.3 Mbit/s"
This function was introduced in 5.74.
See also UnitPrefix.