Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 352b368

Browse files
author
Thomas G. Lockhart
committed
Add 'GERMAN' style to date/time output.
Probably have it wrong (dd.mm/yyyy) but can change it when we know. Input routines always handled it.
1 parent d7e0e61 commit 352b368

File tree

1 file changed

+143
-174
lines changed
  • src/backend/utils/adt

1 file changed

+143
-174
lines changed

src/backend/utils/adt/dt.c

+143-174
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.44 1997/11/17 16:23:33 thomas Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.45 1997/12/04 23:30:52 thomas Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -4099,103 +4099,54 @@ EncodeSpecialDateTime(DateTime dt, char *str)
40994099
int
41004100
EncodeDateOnly(struct tm * tm, int style, char *str)
41014101
{
4102-
#if FALSE
4103-
int day;
4104-
4105-
#endif
4106-
41074102
if ((tm->tm_mon < 1) || (tm->tm_mon > 12))
41084103
return -1;
41094104

4110-
/* compatible with ISO date formats */
4111-
if (style == USE_ISO_DATES)
4105+
switch (style)
41124106
{
4113-
if (tm->tm_year > 0)
4114-
{
4115-
sprintf(str, "%04d-%02d-%02d",
4107+
/* compatible with ISO date formats */
4108+
case USE_ISO_DATES:
4109+
if (tm->tm_year > 0)
4110+
sprintf(str, "%04d-%02d-%02d",
41164111
tm->tm_year, tm->tm_mon, tm->tm_mday);
4117-
4118-
}
4119-
else
4120-
{
4121-
sprintf(str, "%04d-%02d-%02d %s",
4112+
else
4113+
sprintf(str, "%04d-%02d-%02d %s",
41224114
-(tm->tm_year - 1), tm->tm_mon, tm->tm_mday, "BC");
4123-
}
4115+
break;
41244116

41254117
/* compatible with Oracle/Ingres date formats */
4126-
}
4127-
else if (style == USE_SQL_DATES)
4128-
{
4129-
if (EuroDates)
4130-
{
4131-
sprintf(str, "%02d/%02d", tm->tm_mday, tm->tm_mon);
4132-
}
4133-
else
4134-
{
4135-
sprintf(str, "%02d/%02d", tm->tm_mon, tm->tm_mday);
4136-
}
4137-
if (tm->tm_year > 0)
4138-
{
4139-
sprintf((str + 5), "/%04d", tm->tm_year);
4140-
4141-
}
4142-
else
4143-
{
4144-
sprintf((str + 5), "/%04d %s", -(tm->tm_year - 1), "BC");
4145-
}
4146-
4147-
/* backward-compatible with traditional Postgres abstime dates */
4148-
}
4149-
else
4150-
{ /* if (style == USE_POSTGRES_DATES) */
4151-
4152-
#if FALSE
4153-
day = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday);
4154-
#ifdef DATEDEBUG
4155-
printf("EncodeDateOnly- day is %d\n", day);
4156-
#endif
4157-
tm->tm_wday = j2day(day);
4158-
4159-
strncpy(str, days[tm->tm_wday], 3);
4160-
strcpy((str + 3), " ");
4161-
4162-
if (EuroDates)
4163-
{
4164-
sprintf((str + 4), "%02d %3s", tm->tm_mday, months[tm->tm_mon - 1]);
4165-
}
4166-
else
4167-
{
4168-
sprintf((str + 4), "%3s %02d", months[tm->tm_mon - 1], tm->tm_mday);
4169-
}
4170-
if (tm->tm_year > 0)
4171-
{
4172-
sprintf((str + 10), " %04d", tm->tm_year);
4118+
case USE_SQL_DATES:
4119+
if (EuroDates)
4120+
sprintf(str, "%02d/%02d", tm->tm_mday, tm->tm_mon);
4121+
else
4122+
sprintf(str, "%02d/%02d", tm->tm_mon, tm->tm_mday);
4123+
if (tm->tm_year > 0)
4124+
sprintf((str + 5), "/%04d", tm->tm_year);
4125+
else
4126+
sprintf((str + 5), "/%04d %s", -(tm->tm_year - 1), "BC");
4127+
break;
41734128

4174-
}
4175-
else
4176-
{
4177-
sprintf((str + 10), " %04d %s", -(tm->tm_year - 1), "BC");
4178-
}
4179-
#endif
4129+
/* German-style date format */
4130+
case USE_GERMAN_DATES:
4131+
sprintf(str, "%02d.%02d", tm->tm_mday, tm->tm_mon);
4132+
if (tm->tm_year > 0)
4133+
sprintf((str + 5), "/%04d", tm->tm_year);
4134+
else
4135+
sprintf((str + 5), "/%04d %s", -(tm->tm_year - 1), "BC");
4136+
break;
41804137

41814138
/* traditional date-only style for Postgres */
4182-
if (EuroDates)
4183-
{
4184-
sprintf(str, "%02d-%02d", tm->tm_mday, tm->tm_mon);
4185-
}
4186-
else
4187-
{
4188-
sprintf(str, "%02d-%02d", tm->tm_mon, tm->tm_mday);
4189-
}
4190-
if (tm->tm_year > 0)
4191-
{
4192-
sprintf((str + 5), "-%04d", tm->tm_year);
4193-
4194-
}
4195-
else
4196-
{
4197-
sprintf((str + 5), "-%04d %s", -(tm->tm_year - 1), "BC");
4198-
}
4139+
case USE_POSTGRES_DATES:
4140+
default:
4141+
if (EuroDates)
4142+
sprintf(str, "%02d-%02d", tm->tm_mday, tm->tm_mon);
4143+
else
4144+
sprintf(str, "%02d-%02d", tm->tm_mon, tm->tm_mday);
4145+
if (tm->tm_year > 0)
4146+
sprintf((str + 5), "-%04d", tm->tm_year);
4147+
else
4148+
sprintf((str + 5), "-%04d %s", -(tm->tm_year - 1), "BC");
4149+
break;
41994150
}
42004151

42014152
#ifdef DATEDEBUG
@@ -4232,6 +4183,14 @@ EncodeTimeOnly(struct tm * tm, double fsec, int style, char *str)
42324183

42334184
/* EncodeDateTime()
42344185
* Encode date and time interpreted as local time.
4186+
* Support several date styles:
4187+
* Postgres - day mon hh:mm:ss yyyy tz
4188+
* SQL - mm/dd/yyyy hh:mm:ss.ss tz
4189+
* ISO - yyyy-mm-dd hh:mm:ss+/-tz
4190+
* German - dd.mm/yyyy hh:mm:ss tz
4191+
* Variants (affects order of month and day for Postgres and SQL styles):
4192+
* US - mm/dd/yyyy
4193+
* European - dd/mm/yyyy
42354194
*/
42364195
int
42374196
EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, char *str)
@@ -4261,124 +4220,134 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
42614220
#endif
42624221
#endif
42634222

4264-
/* compatible with ISO date formats */
4265-
if (style == USE_ISO_DATES)
4223+
switch (style)
42664224
{
4267-
if (tm->tm_year > 0)
4268-
{
4269-
sprintf(str, "%04d-%02d-%02d %02d:%02d:",
4270-
tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min);
4271-
sprintf((str + 17), ((fsec != 0) ? "%05.2f" : "%02.0f"), sec);
4225+
/* compatible with ISO date formats */
42724226

4273-
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
4227+
case USE_ISO_DATES:
4228+
if (tm->tm_year > 0)
42744229
{
4275-
if (tzp != NULL)
4276-
{
4277-
hour = -(*tzp / 3600);
4278-
min = ((abs(*tzp) / 60) % 60);
4279-
}
4280-
else
4230+
sprintf(str, "%04d-%02d-%02d %02d:%02d:",
4231+
tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min);
4232+
sprintf((str + 17), ((fsec != 0) ? "%05.2f" : "%02.0f"), sec);
4233+
4234+
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
42814235
{
4282-
hour = 0;
4283-
min = 0;
4236+
if (tzp != NULL)
4237+
{
4238+
hour = -(*tzp / 3600);
4239+
min = ((abs(*tzp) / 60) % 60);
4240+
}
4241+
else
4242+
{
4243+
hour = 0;
4244+
min = 0;
4245+
}
4246+
sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min);
42844247
}
4285-
sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min);
4286-
}
42874248

4288-
}
4289-
else
4290-
{
4291-
if (tm->tm_hour || tm->tm_min)
4292-
{
4293-
sprintf(str, "%04d-%02d-%02d %02d:%02d %s",
4294-
-(tm->tm_year - 1), tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, "BC");
42954249
}
42964250
else
42974251
{
4298-
sprintf(str, "%04d-%02d-%02d %s",
4299-
-(tm->tm_year - 1), tm->tm_mon, tm->tm_mday, "BC");
4252+
if (tm->tm_hour || tm->tm_min)
4253+
sprintf(str, "%04d-%02d-%02d %02d:%02d %s",
4254+
-(tm->tm_year - 1), tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, "BC");
4255+
else
4256+
sprintf(str, "%04d-%02d-%02d %s",
4257+
-(tm->tm_year - 1), tm->tm_mon, tm->tm_mday, "BC");
43004258
}
4301-
}
4259+
break;
43024260

43034261
/* compatible with Oracle/Ingres date formats */
4304-
}
4305-
else if (style == USE_SQL_DATES)
4306-
{
4307-
if (EuroDates)
4308-
{
4309-
sprintf(str, "%02d/%02d", tm->tm_mday, tm->tm_mon);
4310-
}
4311-
else
4312-
{
4313-
sprintf(str, "%02d/%02d", tm->tm_mon, tm->tm_mday);
4314-
}
4315-
if (tm->tm_year > 0)
4316-
{
4317-
sprintf((str + 5), "/%04d %02d:%02d:%05.2f",
4318-
tm->tm_year, tm->tm_hour, tm->tm_min, sec);
4262+
case USE_SQL_DATES:
4263+
if (EuroDates)
4264+
sprintf(str, "%02d/%02d", tm->tm_mday, tm->tm_mon);
4265+
else
4266+
sprintf(str, "%02d/%02d", tm->tm_mon, tm->tm_mday);
43194267

4320-
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
4268+
if (tm->tm_year > 0)
43214269
{
4322-
strcpy((str + 22), " ");
4323-
strcpy((str + 23), *tzn);
4270+
sprintf((str + 5), "/%04d %02d:%02d:%05.2f",
4271+
tm->tm_year, tm->tm_hour, tm->tm_min, sec);
4272+
4273+
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
4274+
{
4275+
strcpy((str + 22), " ");
4276+
strcpy((str + 23), *tzn);
4277+
}
4278+
43244279
}
4280+
else
4281+
sprintf((str + 5), "/%04d %02d:%02d %s",
4282+
-(tm->tm_year - 1), tm->tm_hour, tm->tm_min, "BC");
4283+
break;
43254284

4326-
}
4327-
else
4328-
{
4285+
/* German variant on European style; note mixed delimiters dd.mm/yyyy */
4286+
case USE_GERMAN_DATES:
4287+
sprintf(str, "%02d.%02d", tm->tm_mday, tm->tm_mon);
4288+
if (tm->tm_year > 0)
4289+
{
4290+
sprintf((str + 5), "/%04d %02d:%02d:%05.2f",
4291+
tm->tm_year, tm->tm_hour, tm->tm_min, sec);
4292+
4293+
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
4294+
{
4295+
strcpy((str + 22), " ");
4296+
strcpy((str + 23), *tzn);
4297+
}
4298+
4299+
}
4300+
else
43294301
sprintf((str + 5), "/%04d %02d:%02d %s",
43304302
-(tm->tm_year - 1), tm->tm_hour, tm->tm_min, "BC");
4331-
}
4303+
break;
43324304

43334305
/* backward-compatible with traditional Postgres abstime dates */
4334-
}
4335-
else
4336-
{ /* if (style == USE_POSTGRES_DATES) */
4337-
day = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday);
4306+
case USE_POSTGRES_DATES:
4307+
default:
4308+
day = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday);
43384309
#ifdef DATEDEBUG
4339-
printf("EncodeDateTime- day is %d\n", day);
4310+
printf("EncodeDateTime- day is %d\n", day);
43404311
#endif
4341-
tm->tm_wday = j2day(day);
4312+
tm->tm_wday = j2day(day);
43424313

4343-
strncpy(str, days[tm->tm_wday], 3);
4344-
strcpy((str + 3), " ");
4314+
strncpy(str, days[tm->tm_wday], 3);
4315+
strcpy((str + 3), " ");
43454316

4346-
if (EuroDates)
4347-
{
4348-
sprintf((str + 4), "%02d %3s", tm->tm_mday, months[tm->tm_mon - 1]);
4349-
}
4350-
else
4351-
{
4352-
sprintf((str + 4), "%3s %02d", months[tm->tm_mon - 1], tm->tm_mday);
4353-
}
4354-
if (tm->tm_year > 0)
4355-
{
4356-
sprintf((str + 10), " %02d:%02d", tm->tm_hour, tm->tm_min);
4357-
if (fsec != 0)
4317+
if (EuroDates)
4318+
sprintf((str + 4), "%02d %3s", tm->tm_mday, months[tm->tm_mon - 1]);
4319+
else
4320+
sprintf((str + 4), "%3s %02d", months[tm->tm_mon - 1], tm->tm_mday);
4321+
4322+
if (tm->tm_year > 0)
43584323
{
4359-
sprintf((str + 16), ":%05.2f %04d", sec, tm->tm_year);
4360-
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
4324+
sprintf((str + 10), " %02d:%02d", tm->tm_hour, tm->tm_min);
4325+
if (fsec != 0)
43614326
{
4362-
strcpy((str + 27), " ");
4363-
strcpy((str + 28), *tzn);
4327+
sprintf((str + 16), ":%05.2f %04d", sec, tm->tm_year);
4328+
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
4329+
{
4330+
strcpy((str + 27), " ");
4331+
strcpy((str + 28), *tzn);
4332+
}
43644333
}
4365-
}
4366-
else
4367-
{
4368-
sprintf((str + 16), ":%02.0f %04d", sec, tm->tm_year);
4369-
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
4334+
else
43704335
{
4371-
strcpy((str + 24), " ");
4372-
strcpy((str + 25), *tzn);
4336+
sprintf((str + 16), ":%02.0f %04d", sec, tm->tm_year);
4337+
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
4338+
{
4339+
strcpy((str + 24), " ");
4340+
strcpy((str + 25), *tzn);
4341+
}
43734342
}
4374-
}
43754343

4376-
}
4377-
else
4378-
{
4379-
sprintf((str + 10), " %02d:%02d %04d %s",
4344+
}
4345+
else
4346+
{
4347+
sprintf((str + 10), " %02d:%02d %04d %s",
43804348
tm->tm_hour, tm->tm_min, -(tm->tm_year - 1), "BC");
4381-
}
4349+
}
4350+
break;
43824351
}
43834352

43844353
#ifdef DATEDEBUG

0 commit comments

Comments
 (0)