⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 localeinfo.cpp

📁 vc座的资源管理器源代码
💻 CPP
字号:
//*******************************************************************************
// COPYRIGHT NOTES
// ---------------
// You may use this source code, compile or redistribute it as part of your application 
// for free. You cannot redistribute it as a part of a software development 
// library without the agreement of the author. If the sources are 
// distributed along with the application, you should leave the original 
// copyright notes in the source code without any changes.
// This code can be used WITHOUT ANY WARRANTIES at your own risk.
// 
// For the latest updates to this code, check this site:
// http://www.masmex.com 
// after Sept 2000
// 
// Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
//*******************************************************************************

// LocaleInfo.cpp: implementation of the CLocaleInfo class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "LocaleInfo.h"
#include "TextParse.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
// static
CLocaleInfo *CLocaleInfo::Instance()
{
	static CLocaleInfo data;
	return &data;
}

CLocaleInfo::CLocaleInfo()
{
	m_pszNegativeSign = NULL;
	m_pszDecimalSep = NULL;
	m_pszThousandSep = NULL;
	m_pszLongDate = NULL;
	m_pszShortDate = NULL;
	m_pszShortTime = NULL;
	m_pszLongTime = NULL;
	m_pszDateSep = NULL;
	m_pszTimeSep = NULL;
	GetAllLocaleInfo();
}

CLocaleInfo::~CLocaleInfo()
{
	delete []m_pszNegativeSign;
	delete []m_pszDecimalSep;
	delete []m_pszThousandSep;
	delete []m_pszLongDate;
	delete []m_pszShortDate;
	delete []m_pszShortTime;
	delete []m_pszLongTime;
	delete []m_pszDateSep;
	delete []m_pszTimeSep;
}

void CLocaleInfo::GetAllLocaleInfo()
{		
	m_pszShortTime = new TCHAR[MAX_PATH];
	lstrcpy(m_pszShortTime,_T("H:mm"));
	AllocLocaleInfo(LOCALE_STIMEFORMAT,&m_pszLongTime);
	AllocLocaleInfo(LOCALE_SSHORTDATE,&m_pszShortDate);
	AllocLocaleInfo(LOCALE_SLONGDATE,&m_pszLongDate);
	AllocLocaleInfo(LOCALE_SDATE,&m_pszDateSep);
	AllocLocaleInfo(LOCALE_STIME,&m_pszTimeSep);
	AllocLocaleInfo(LOCALE_SNEGATIVESIGN,&m_pszNegativeSign);
	AllocLocaleInfo(LOCALE_SDECIMAL,&m_pszDecimalSep);
	AllocLocaleInfo(LOCALE_STHOUSAND,&m_pszThousandSep);
}

void CLocaleInfo::AllocLocaleInfo(LCTYPE lctype,LPTSTR *pszInfo)
{
	int nLen = GetLocaleInfo(LOCALE_USER_DEFAULT,lctype,NULL,0);
	if (nLen)
	{
		*pszInfo = new TCHAR[nLen];
		GetLocaleInfo(LOCALE_USER_DEFAULT,lctype,*pszInfo,nLen);
	}
}

CString CLocaleInfo::FormatDateTime(const COleDateTime &oleDateTime)
{
	CString sDate, sTime;
	sDate = oleDateTime.Format(ConvertStdToWinFormat(GetShortDate()));
	sTime = oleDateTime.Format(ConvertStdToWinFormat(GetLongTime()));
	return sDate + _T(" ") + sTime;
}

CString CLocaleInfo::FormatDateTime(const FILETIME &ft)
{
	COleDateTime oleDateTime(ft);
	return FormatDateTime(oleDateTime);
}

static struct FormatCodes
{
	LPCTSTR szWinFormat;
	LPCTSTR szStdFormat;
} FC[] = { 
	{ _T("M"), _T("%#m") },
	{ _T("MM"),_T("%m") },
	{ _T("MMM"),_T("%b") },
	{ _T("MMMM"),_T("%B") },
	{ _T("d"),_T("%#d") },
	{ _T("dd"),_T("%d") },
	{ _T("dddd"),_T("%A") },
	{ _T("yy"),_T("%y") },
	{ _T("yyyy"),_T("%Y") },
	{ _T("H"),_T("%#H") },
	{ _T("HH"),_T("%H") },
	{ _T("h"),_T("%#I") },
	{ _T("hh"),_T("%I") },
	{ _T("mm"),_T("%M") },
	{ _T("ss"),_T("%S") },
	{ _T("tt"),_T("%p") },
{  NULL, NULL }
};

// Short Format
// M/d/yyyy
// M/d/yy
// MM/dd/yy
// MM/dd/yyyy
// yy/MM/dd
// yyyy-MM-dd
// dd-MMM-yy

// Long Format
// dddd, MMMM dd, yyyy
// MMMM dd, yyyy
// dddd, dd MMMM, yyyy
// dd MMMM, yyyy

// Time
// H:mm:ss
// h:mm:ss tt
// hh:mm:ss tt
// HH:mm:ss

CString CLocaleInfo::ConvertStdToWinFormat(LPCTSTR pszFormat)
{
	CString sCode;
	CString sWinFormat;
	CTextParse parse(pszFormat);
	CString sSeparators(_T(" -/,.:"));
	while (!parse.IsEnd())
	{
			if (parse.CharAtCurrent(sSeparators))
			{
				sCode = parse.CopyWhileChar(sSeparators);
			}
			else
			{
				sCode = parse.CopyUntilChar(sSeparators);
			}
			StdToWinFormatCode(sCode);
			sWinFormat += sCode;
	}
	return sWinFormat;
}

void CLocaleInfo::StdToWinFormatCode(CString &sCode)
{
	for(int i=0;FC[i].szWinFormat != NULL;i++) 
	{
		if (sCode == FC[i].szWinFormat)
		{
			sCode = FC[i].szStdFormat;
			break;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -