PostgreSQL Source Code: src/timezone/strftime.c Source File (original) (raw)

49{

57 const char *am;

58 const char *pm;

60};

65 {

66 "Jan", "Feb", "Mar", "Apr", "May", "Jun",

67 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"

68 }, {

69 "January", "February", "March", "April", "May", "June",

70 "July", "August", "September", "October", "November", "December"

71 }, {

72 "Sun", "Mon", "Tue", "Wed",

73 "Thu", "Fri", "Sat"

74 }, {

75 "Sunday", "Monday", "Tuesday", "Wednesday",

76 "Thursday", "Friday", "Saturday"

77 },

78

79

80 "%H:%M:%S",

81

82

83

84

85

86

87

88 "%m/%d/%y",

89

90

91

92

93

94

95

96

97 "%a %b %e %T %Y",

98

99

100 "AM",

101

102

103 "PM",

104

105

106 "%a %b %e %H:%M:%S %Z %Y"

107};

116static char *_fmt(const char *format, const struct pg_tm *t, char *pt, const char *ptlim,

129{

130 char *p;

131 int saved_errno = errno;

133

135 if (!p)

136 {

138 return 0;

139 }

141 {

143 return 0;

144 }

145 *p = '\0';

146 errno = saved_errno;

147 return p - s;

148}

153{

155 {

157 {

160 {

161 case '\0':

163 break;

164 case 'A':

169 continue;

170 case 'a':

175 continue;

176 case 'B':

181 continue;

182 case 'b':

183 case 'h':

188 continue;

189 case 'C':

190

191

192

193

194

195

198 continue;

199 case 'c':

200 {

202

208 }

209 continue;

210 case 'D':

212 continue;

213 case 'd':

215 continue;

216 case 'E':

217 case 'O':

218

219

220

221

222

223

224

226 case 'e':

228 continue;

229 case 'F':

231 continue;

232 case 'H':

234 continue;

235 case 'I':

239 continue;

240 case 'j':

242 continue;

243 case 'k':

244

245

246

247

248

249

250

251

253 continue;

254#ifdef KITCHEN_SINK

255 case 'K':

256

257

258

259

261 continue;

262#endif

263 case 'l':

264

265

266

267

268

269

270

274 continue;

275 case 'M':

277 continue;

278 case 'm':

280 continue;

281 case 'n':

283 continue;

284 case 'p':

289 continue;

290 case 'R':

292 continue;

293 case 'r':

295 continue;

296 case 'S':

298 continue;

299 case 'T':

301 continue;

302 case 't':

304 continue;

305 case 'U':

309 continue;

310 case 'u':

311

312

313

314

315

316

320 continue;

321 case 'V':

322 case 'G':

323 case 'g':

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342 {

343 int year;

344 int base;

347 int w;

348

353 for (;;)

354 {

358

362

363

364

365

366

369

370

371

372

375 if (top < -3)

379 {

380 ++base;

381 w = 1;

382 break;

383 }

385 {

388 break;

389 }

390 --base;

394 }

398 else if (*format == 'g')

399 {

402 false, true,

404 }

405 else

407 true, true,

409 }

410 continue;

411 case 'v':

412

413

414

415

416

418 continue;

419 case 'W':

425 continue;

426 case 'w':

428 continue;

429 case 'X':

431 continue;

432 case 'x':

433 {

435

441 }

442 continue;

443 case 'y':

446 false, true,

448 continue;

449 case 'Y':

451 true, true,

453 continue;

454 case 'Z':

457

458

459

460

461

462

463 continue;

464 case 'z':

465 {

467 char const *sign;

468 bool negative;

469

471 continue;

473 negative = diff < 0;

474 if (diff == 0)

475 {

477 negative = t->tm_zone[0] == '-';

478 }

479 if (negative)

480 {

483 }

484 else

491 }

492 continue;

493 case '+':

496 continue;

497 case '%':

498

499

500

501

502

503

504 default:

505 break;

506 }

507 }

509 break;

511 }

512 return pt;

513}

526{

528 ++pt;

529 return pt;

530}

542 char *pt, const char *ptlim)

543{

546

547#define DIVISOR 100

552 {

555 }

557 {

560 }

562 {

565 else

567 }

570 return pt;

571}