static VALUE rhrd_asctime(VALUE self) {
VALUE s;
rhrd_t *d;
int len;
Data_Get_Struct(self, rhrd_t, d);
RHR_FILL_CIVIL(d)
RHR_FILL_JD(d)

s = rb_str_buf_new(128);
len = snprintf(RSTRING_PTR(s), 128, "%s %s %2hhi 00:00:00 %04li",
rhrd__abbr_day_names[rhrd__jd_to_wday(d->jd)],
rhrd__abbr_month_names[d->month],
d->day,
d->year);
if (len == -1 || len > 127) {
rb_raise(rb_eNoMemError, "in Date#asctime (in snprintf)");
}

rb_str_set_len(s, len);
return s;
}