Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ TryFormatDateTimeO()

static bool System.Buffers.Text.Utf8Formatter.TryFormatDateTimeO ( DateTime value,
TimeSpan offset,
Span< byte > destination,
out int bytesWritten )
inlinestaticprivate

Definition at line 262 of file Utf8Formatter.cs.

263 {
264 int num = 27;
265 DateTimeKind dateTimeKind = DateTimeKind.Local;
266 if (offset == Utf8Constants.NullUtcOffset)
267 {
268 dateTimeKind = value.Kind;
269 switch (dateTimeKind)
270 {
271 case DateTimeKind.Local:
272 offset = TimeZoneInfo.Local.GetUtcOffset(value);
273 num += 6;
274 break;
275 case DateTimeKind.Utc:
276 num++;
277 break;
278 }
279 }
280 else
281 {
282 num += 6;
283 }
284 if (destination.Length < num)
285 {
286 bytesWritten = 0;
287 return false;
288 }
289 bytesWritten = num;
290 _ = ref destination[26];
291 value.GetDate(out var year, out var month, out var day);
292 value.GetTimePrecise(out var hour, out var minute, out var second, out var tick);
293 FormattingHelpers.WriteFourDecimalDigits((uint)year, destination);
294 destination[4] = 45;
295 FormattingHelpers.WriteTwoDecimalDigits((uint)month, destination, 5);
296 destination[7] = 45;
297 FormattingHelpers.WriteTwoDecimalDigits((uint)day, destination, 8);
298 destination[10] = 84;
299 FormattingHelpers.WriteTwoDecimalDigits((uint)hour, destination, 11);
300 destination[13] = 58;
301 FormattingHelpers.WriteTwoDecimalDigits((uint)minute, destination, 14);
302 destination[16] = 58;
303 FormattingHelpers.WriteTwoDecimalDigits((uint)second, destination, 17);
304 destination[19] = 46;
305 FormattingHelpers.WriteDigits((uint)tick, destination.Slice(20, 7));
306 switch (dateTimeKind)
307 {
308 case DateTimeKind.Local:
309 {
310 int num2 = (int)(offset.Ticks / 600000000);
311 byte b;
312 if (num2 < 0)
313 {
314 b = 45;
315 num2 = -num2;
316 }
317 else
318 {
319 b = 43;
320 }
321 int result;
322 int value2 = Math.DivRem(num2, 60, out result);
323 FormattingHelpers.WriteTwoDecimalDigits((uint)result, destination, 31);
324 destination[30] = 58;
325 FormattingHelpers.WriteTwoDecimalDigits((uint)value2, destination, 28);
326 destination[27] = b;
327 break;
328 }
329 case DateTimeKind.Utc:
330 destination[27] = 90;
331 break;
332 }
333 return true;
334 }

References System.destination, System.Math.DivRem(), System.TimeZoneInfo.Local, System.Buffers.Text.Utf8Constants.NullUtcOffset, System.offset, System.value, System.Buffers.Text.FormattingHelpers.WriteDigits(), System.Buffers.Text.FormattingHelpers.WriteFourDecimalDigits(), System.Buffers.Text.FormattingHelpers.WriteTwoDecimalDigits(), and System.year.

Referenced by System.Buffers.Text.Utf8Formatter.TryFormat(), and System.Buffers.Text.Utf8Formatter.TryFormat().