[freetds] Locale specific problem

James K. Lowden jklowden at schemamania.org
Wed Aug 11 18:31:06 EDT 2004

On Tue, 10 Aug 2004 <simon at magazineluiza.com.br> wrote:
> I believe I have a bug in freetds's date-time formatting. The locale on
> my box is ...;LC_TIME=pt_BR;...
> 12:00 is shown as 12:00 and 12:00PM is shown as 12:00... i.e. I can´t
> differentiate between AM and PM. For this locale, it would be normally
> shown as 00:00-23:59.

Hi Simon, 

Welcome to the project.  

FreeTDS uses strftime(3) to format date strings:  

     strftime(char * restrict buf, size_t maxsize,
             const char * restrict format,
             const struct tm * restrict timeptr);

The format string is taken from locales.conf.  There is a built-in default
if its not found, one for each client library (because historically each
has had its own default format).  Are you perhaps using ODBC?  Cf. 4
odbc.c, line 1034.  Else grep for date_fmt.  

Probably all you need to do is add a section for pt_BR to locales.conf. 
If that doesn't do the trick, please show the output of the attached
little program.  



#include <stdio.h>
#include <time.h>

	char buf[80];
	time_t clock = time(NULL);
	struct tm *ptm = localtime(&clock);
	ptm->tm_hour = ptm->tm_min = ptm->tm_sec = 0;
	strftime( buf, sizeof(buf), "%b %d %Y %I:%M%p", ptm );
	puts( buf );

	ptm->tm_hour = 12;
	strftime( buf, sizeof(buf), "%b %d %Y %I:%M%p", ptm );
	puts( buf );

	return 0;

More information about the FreeTDS mailing list