diff --git a/main.zig b/main.zig index 594f700b0b5ad3e879a05d6004848fa036a1cd5f..ed6b37dc6bbeb7103649c8a3ef56de63a8a263a0 100644 --- a/main.zig +++ b/main.zig @@ -20,3 +20,11 @@ test { try assertOk(0, "YYY-MM-DD HH:mm:ss", "1970-01-01 00:00:00"); test { try assertOk(1257894000000, "YYY-MM-DD HH:mm:ss", "2009-11-10 23:00:00"); } test { try assertOk(1634858430000, "YYY-MM-DD HH:mm:ss", "2021-10-21 23:20:30"); } test { try assertOk(1634858430023, "YYY-MM-DD HH:mm:ss.SSS", "2021-10-21 23:20:30.023"); } +test { try assertOk(1144509852789, "YYY-MM-DD HH:mm:ss.SSS", "2006-04-08 15:24:12.789"); } + +// test every field +test { try assertOk(1144509852789, "M", "4"); } +test { try assertOk(1144509852789, "Mo", "4th"); } +test { try assertOk(1144509852789, "MM", "04"); } +test { try assertOk(1144509852789, "MMM", "Apr"); } +test { try assertOk(1144509852789, "MMMM", "April"); } diff --git a/time.zig b/time.zig index 3ef8418e5eb13135774e1fc2998c971c046c8dd1..e5e357b77bc81b0031367a0d7eb1414ac18bcad6 100644 --- a/time.zig +++ b/time.zig @@ -228,11 +228,17 @@ pub const DateTime = struct { .SSS => try writer.print("{:0>3}", .{self.ms}), .MM => try writer.print("{:0>2}", .{self.months + 1}), .z => try writer.writeAll(@tagName(self.timezone)), + .M => try writer.print("{}", .{self.months + 1}), + .Mo => try printOrdinal(writer, self.months + 1), .MMM => { const names = [_]string{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; try writer.writeAll(names[self.months]); }, + .MMMM => try printLongName(writer, self.months, &[_]string{ + "January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December", + }), else => @compileError("'" ++ @tagName(tag) ++ "' not currently supported"), } @@ -361,3 +367,17 @@ pub const WeekDay = enum { }; } }; + +fn printOrdinal(writer: anytype, num: u16) !void { + try writer.print("{}", .{num}); + try writer.writeAll(switch (num) { + 1 => "st", + 2 => "nd", + 3 => "rd", + else => "th", + }); +} + +fn printLongName(writer: anytype, index: u16, names: []const string) !void { + try writer.writeAll(names[index]); +}