1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
//! Date/time formatting
const time = @import("time.zig");
const MONTH_NAMES = [_][]const u8{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
pub fn date(timestamp: u64, buf: []u8) []const u8 {
if (timestamp == 0) {
const default = "01 Jan 1970 00:00";
for (default, 0..) |c, i| {
buf[i] = c;
}
return buf[0..default.len];
}
const dt = time.parts(timestamp);
var pos: usize = 0;
// Day
if (dt.day < 10) {
buf[pos] = '0';
pos += 1;
}
pos += writeInt(dt.day, buf[pos..]);
buf[pos] = ' ';
pos += 1;
// Month name
const month_idx = if (dt.month > 0 and dt.month <= 12) dt.month - 1 else 0;
for (MONTH_NAMES[month_idx]) |c| {
buf[pos] = c;
pos += 1;
}
buf[pos] = ' ';
pos += 1;
// Year
pos += writeInt(dt.year, buf[pos..]);
buf[pos] = ' ';
pos += 1;
// Hour
if (dt.hour < 10) {
buf[pos] = '0';
pos += 1;
}
pos += writeInt(dt.hour, buf[pos..]);
buf[pos] = ':';
pos += 1;
// Minute
if (dt.minute < 10) {
buf[pos] = '0';
pos += 1;
}
pos += writeInt(dt.minute, buf[pos..]);
return buf[0..pos];
}
pub fn duration(total_secs: u64, buf: []u8) []const u8 {
const hours = total_secs / 3600;
const mins = (total_secs % 3600) / 60;
const secs = total_secs % 60;
var pos: usize = 0;
pos += writeInt(hours, buf[pos..]);
buf[pos] = 'h';
pos += 1;
buf[pos] = ' ';
pos += 1;
pos += writeInt(mins, buf[pos..]);
buf[pos] = 'm';
pos += 1;
buf[pos] = ' ';
pos += 1;
pos += writeInt(secs, buf[pos..]);
buf[pos] = 's';
pos += 1;
return buf[0..pos];
}
fn writeInt(value: u64, buf: []u8) usize {
if (value == 0) {
buf[0] = '0';
return 1;
}
var temp: [20]u8 = undefined;
var len: usize = 0;
var v = value;
while (v > 0) : (v /= 10) {
temp[len] = @intCast('0' + (v % 10));
len += 1;
}
for (0..len) |i| {
buf[i] = temp[len - 1 - i];
}
return len;
}
|